#django #django-views
#django #django-представления
Вопрос:
Я пытаюсь передать переменную, используя функцию перенаправления, но она возвращает none.
def one:
# define location variable here
return redirect(getting_started_info, location=location)
def getting_started_info(request, location=''):
location = location
...
Может кто-нибудь, пожалуйста, сказать мне, почему переменная в перенаправлении не передается?
Ответ №1:
Помните, что redirect()
это не прямой вызов вашего представления, это фактически отправка браузеру клиента 302 Found
статуса ( 301 Moved Permanently
если вы используете permanent=True
) с инструкцией перенаправить на другой URL. В этом случае этот URL-адрес соответствует getting_started_info
представлению.
Я считаю, что для того, чтобы это сработало, должен существовать urlconf, который сопоставляется с getting_started_view
и который использует свой location
позиционный аргумент. Это, скорее всего, произойдет через именованные группы.
Из записи django 1.8 docs на redirect()
:
Аргументы могут быть:
- Модель: будет вызвана функция get_absolute_url() модели.
- Имя представления, возможно, с аргументами: urlresolvers.reverse, будет использоваться для обратного разрешения имени.
- Абсолютный или относительный URL, который будет использоваться как есть для местоположения перенаправления.
Ответ №2:
return HttpResponseRedirect(reverse('getting_started_info', kwargs={'location': location}))
Комментарии:
1. Нужно ли мне изменять мой urls.py из-за аргумента?
2. Этот ответ буквально представляет собой одну строку кода. Вам нужно приложить больше усилий, чтобы объяснить, почему это работает, потому что это сообщество людей, которые хотят учиться, а не просто заставлять вещи работать.
Ответ №3:
вы также можете передать значение некоторой переменной, используя сеансы или cookie.