Передача переменной в redirect в Django

#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.