Как передать extra_context при перенаправлении в Django

Мои views.py:

 @login_required
 def some_views(request):
     if request.method == 'POST':
         form = AddressCreateFrom(request.POST)
         if form.is_valid():
             name = form.cleaned_data['Address']
             ip_value = form.cleaned_data['value']
             user_list = get_username(name)
             address_create = form.save()
             extra_context = {
                 'user_list': user_list
                 }
             return redirect_to(request, url=address_create.get_absolute_url())
     else:
         form = AddressCreateFrom()
     extra_context = {
         'form':AddressCreateFrom(initial={'user': request.user.pk})
         }
     return direct_to_template(request,'networks/user_form.html',extra_context)

В form.py:

 class AddressCreateFrom(forms.ModelForm):
     Address = forms.CharField(max_length=40)
     value = forms.CharField(max_length=40)
     class Meta:
         model = Network
         widgets = {
             'user': forms.HiddenInput()
           }

Как вы видите, я использую форму модели Django с двумя дополнительными полями формы Django, т.е.Address and value вAddressCreateForm учебный класс. Мне нужно все поля во время рендеринга шаблона.

В самом делеsome_views Метод работает нормально, но я также хочу сделать некоторые дополнительные данные, записанные вcontext_dictionary то естьuser_list для запрашивающегоURL то естьaddress_create.get_absolute_url().

Если я не ошибаюсь, если мы работаем с базой данных, мы должны использоватьredirect_to метод. Возможно ли это сделать?

 Amit Pal01 июн. 2012 г., 15:09
-1 для "ЧТО". Я просил хитрость. Это что-то не так с вопросом
 Daniel Roseman01 июн. 2012 г., 15:00
Что именно ты пытаешься сделать? Для чего нужен extra_context? Зачем перенаправлению нужен какой-либо контекст?
 Daniel Roseman01 июн. 2012 г., 15:15
Какой шаблон? Вы перенаправляете, а не визуализируете шаблон.
 Amit Pal01 июн. 2012 г., 15:07
@DanielRoseman Я пытаюсь передать в шаблон переменную uesr_list (которая является типом данных списка) с полем модели сети. Я получаю этот user_list после выполнения некоторых расчетов на основеAddress and ip_value поля. Если бы я сделал таким образом, то я не могу сделатьuser_list переменная к шаблону

Ответы на вопрос(2)

Контекст, дополнительный контекст и данные POST не переносят перенаправление.

Вот что вы можете сделать.

# before the redirect
....
request.session['user_list'] = user_list
return redirect_to(request, url=address_create.get_absolute_url())

# after the redirect (in the views.py that handles your redirect)
....
user_list = request.session['user_list']
extra_context = { 'user_list': user_list }
....
# now you have the user_list in the extra_context and can send it to the rendering engine.

Note: Это решение работает только для перенаправлений на вашем собственном сервере.

Решение Вопроса

Перенаправление вернет HTTP-ответ с кодом состояния 301 или 302 и местом для перенаправления:

301 MOVED PERMANENTLY
Location: http://www.example.com/new-url/

Нет шаблона, отображаемого в исходном представлении, поэтому вы не можете пропуститьextra_context к этому.

Браузер пользователей обычно следует за редиректом и запрашивает новый URL.

Если вы хотите отобразить информацию о конкретном пользователе в следующем представлении, вы должны сделать что-то вроде:

design your url pattern to include the user id, e.g. /users/200/, include it as a get parameter e.g. /users/?id=200, then fetch the user id fromrequest.GET` in the view. store the user_id in the session Before redirecting, create a message using the messages framework using the user data.

Затем в представлении, к которому вы перенаправляете, вы можете выбрать пользователя из базы данных и добавить его в контекст шаблона.

Ваш ответ на вопрос