我在视图上测试重定向(需要登录)。
测试片段:
...
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
功能如下所述。我dict
用urllib.urlencode
.
build_url
来源:我如何使用 django urlresolvers 反向传递 GET 参数
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
从 a 构建一个 urldict
吗?- 百分比编码很重要,所以我必须遵循它吗?