Мне нужно проверить, будет ли перенаправление на URL-адрес ошибкой 404. Следующий пример в django docs: https://docs.djangoproject.com/en/1.8/ref/urlresolvers/#resolveРешение Django с параметрами GET - вызывает Resolver404()
Мне удалось заставить работать следующее. Поэтому, если 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. Как флаг «редактировать» используется для возврата другого QuerySet. например
if 'edit' in request.GET:
qs = qs.drafts()
else:
qs = qs.public()
И я изменил свой первоначальный код:
redirect_url = '%s?edit' % redirect_url
[...]
Однако этот рейз Resolver404.
Полный StackTrace здесь: 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)
Я действительно не хочу, чтобы использовать это.