Мне нужно проверить, приведет ли перенаправление к 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('/')
Однако мне нужно проверить, вызывает ли redirect_url
с параметром GET ?edit
также 404. Поскольку флаг «редактировать» используется для возврата другого набора запросов. например
if 'edit' in request.GET:
qs = qs.drafts()
else:
qs = qs.public()
И я изменил исходный код:
redirect_url = '%s?edit' % redirect_url
[...]
Однако при этом поднимается Resolver404.
Полная трассировка стека здесь: http://dpaste.com/1DQHH7Q
Теперь мой вопрос: как проверить ошибку HTTP404 с параметрами GET?
Путь 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)
Я действительно не хочу использовать это.