0

我的意见.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 valueAddressCreateForm课堂上。在渲染模板时我需要所有字段。

确实some_views方法工作正常,但我还想将一些用context_dictionaryie写入的额外数据呈现user_list给请求的URLie address_create.get_absolute_url()

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

4

2 回答 2

5

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

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

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

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

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

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

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

于 2012-06-01T13:22:38.980 回答
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.

注意:此解决方案仅适用于您自己的服务器内的重定向。

于 2012-06-01T15:03:12.097 回答