在 Django 中重定向时如何传递 extra_context

Ami*_*Pal 0 django django-templates django-forms 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)
Run Code Online (Sandbox Code Playgroud)

在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()
           }
Run Code Online (Sandbox Code Playgroud)

如您所见,我Address and valueAddressCreateForm课堂上使用带有两个额外 Django 表单字段的 Django 模型表单。我在渲染模板时需要所有字段。

确实some_views方法工作正常,但我也想呈现一些额外的数据写入context_dictionaryieuser_list到一个请求URLie address_create.get_absolute_url()

如果我没有错,如果我们正在处理数据库,我们必须使用redirect_to方法。有可能这样做吗?

Ala*_*air 5

重定向将返回带有状态代码 301 或 302 的 HTTP 响应,以及要重定向到的位置:

301 MOVED PERMANENTLY
Location: http://www.example.com/new-url/
Run Code Online (Sandbox Code Playgroud)

原始视图没有渲染模板,因此您无法传递extra_context给它。

用户的浏览器通常会跟随重定向,并请求新的 URL。

如果要在下一个视图中显示有关特定用户的信息,则必须执行以下操作:

  1. 设计您的 URL 模式以包含用户 ID,例如/users/200/
  2. 将其作为获取参数包含在内,例如/users/?id=200,然后从request.GET视图中获取用户 ID 。
  3. 将 user_id 存储在会话中
  4. 在重定向之前,使用消息框架使用用户数据创建消息。

然后在您重定向到的视图中,您可以从数据库中获取用户,并将其添加到模板上下文中。