Django:Client() get/post 响应是否有指示最终 URL 的属性

Django: Is there an attribute to Client() get/post response that indicates final URL

我发现了一些与 URL 重定向测试有关的问题,以查看 URL 重定向是否到达所需目标 URL。不过,我想知道是否有一个属性表明最终目标 URL 落在什么地方。

c = Client()
r = c.get('/sr/portfolios/', follow=True)
r.final_url # something like this?

似乎 redirect_chain 只告诉你 URL 你被重定向了,但没有告诉你最终到达的那些。

r.redirect_chain
# [('http://testserver/sr/?next=/sr/portfolios/', 302)]

我找到的相关(但不相同)主题:Django : Testing if the page has redirected to the desired url

我确定还有其他方法可以做到这一点,但是一个简单的 in 检查就足够了吗?

def test_final_url(self):

    final_url = reverse('your_url_name')

    found = False
    for item in r.redirect_chain:
        if final_url in item[0]:
            found = True
            break

    self.assertTrue(found)

由于 Python 列表没有保证顺序,我不确定查看 r.redirect_chain[-1][0] 是否 100% 安全,但这可能是最快的解决方案。

只是为了突出解决方案,您可以用 r.request['PATH_INFO'] 得到最终的 url。 r.wsgi_request.META['PATH_INFO'] 也有效。