【发布时间】:2015-07-15 12:11:08
【问题描述】:
我需要测试重定向到 url 是否会导致 404 错误。 以下 django 文档中的示例:https://docs.djangoproject.com/en/1.8/ref/urlresolvers/#resolve
我设法让以下工作。因此,如果redirect_url 引发 404,我们会将用户重定向到主页。
redirect_url = '/blog/hello-world'
view, args, kwargs = resolve()
kwargs['request'] = request
try:
view(*args, **kwargs)
except Http404:
self.message_user(...)
return HttpResponseRedirect('/')
但是我需要测试带有?edit GET 参数的redirect_url 是否也会引发404。因为“编辑”标志用于返回不同的查询集。例如
if 'edit' in request.GET:
qs = qs.drafts()
else:
qs = qs.public()
我更改了我的原始代码:
redirect_url = '%s?edit' % redirect_url
[...]
但是这会引发 Resolver404。
此处的完整堆栈跟踪:http://dpaste.com/1DQHH7Q
现在我的问题是如何使用 GET 参数测试 HTTP404 错误?
路径blog/2015/07/14/sky-limit-only-those-who-arent-afraid-fly/?edit 是有效的,当我在浏览器中访问 url 时......它按预期工作。
一个肮脏的解决方案是这样做:
from django.test.client import Client
client = Client()
resp = client.get(redirect_url)
if not resp.status_code == 404:
return HttpResponseRedirect(redirect_url)
我真的不想用这个。
【问题讨论】:
标签: django django-views django-urls