我的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()
。< / p>
如果我没有错,如果我们处理数据库,我们必须使用redirect_to
方法。有可能吗?
答案 0 :(得分:3)
重定向将返回状态代码为301或302的HTTP响应,以及重定向到的位置:
301 MOVED PERMANENTLY
Location: http://www.example.com/new-url/
原始视图没有呈现模板,因此您无法将extra_context
传递给它。
用户浏览器通常会遵循重定向,并请求新的网址。
如果要在下一个视图中显示有关特定用户的信息,您必须执行以下操作:
/users/200/
,/users/?id=200, then fetch the user id from
request.GET`。 然后在您重定向到的视图中,您可以从数据库中获取用户,并将其添加到模板上下文中。
答案 1 :(得分:1)
上下文,额外上下文和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.
注意:此解决方案仅适用于您自己服务器中的重定向。