我在视图上测试重定向(需要登录)。
测试片段:
...
expected_url = build_url(
self.login_url,
get={'next': self.url}
)
self.assertRedirects(
response,
expected_url,
status_code=302
)
我得到AssertionError
,因为expected_url
是百分比编码,django通过login_required
显示的(django.contrib.auth.decorators.login_required
)不是百分比编码。
所以我得到了:
AssertionError: Response redirected to 'http://testserver/log_in/?next=/payments/purchase/'
expected 'http://testserver/log_in/?next=payments%3Apurchase'
我有build_url
func,如下所述。我使用dict
编码urllib.urlencode
。
build_url
来源:How do i pass GET parameters using django urlresolvers reverse
def build_url(*args, **kwargs):
get = kwargs.pop('get', {})
url = reverse(*args, **kwargs)
if get:
url += '?' + urllib.urlencode(get)
return url
问题:
有没有办法告诉django显示login_url
百分比编码?
我应该使用urllib.urlencode
来构建网址
一个dict
?