2017-07-31 40 views
0

我叫我的 “editFamily” 视图通过HttpResponseRedirect从别的地方:Django:查看POST后的参数?

return HttpResponseRedirect(reverse('editFamily', kwargs={'pk': family_id})) 

相应的URL的模式是这样的:

url(r'^editFamily/(?P<pk>[0-9]+)/$', views.editFamily, name='editFamily') 

然后终于有我的观点:

def editFamily(request, pk_): 

    obj = models.Family.objects.all().filter(pk=pk_) 

    if request.method == 'POST': 
     form = forms.FamilyForm(request.POST, instance=obj) 
     if form.is_valid(): 
      form.save() 
    else: 
     form = forms.FamilyForm(instance=obj) 

    return render(request, 'editFamily.html', {'form': form}) 

它需要pk_,结束于else分支并服务于我的编辑-html。但是在观众提交他的关于参数pk_的数据之后会发生什么?我来自POST时是否缺少pk_?我是否必须确保在我的模板中传递该参数?

+0

你为什么使用pk_?改用pk。 –

+0

因为“filter(pk = pk)”...对我来说很奇怪,我想避免错误。 – user3182532

+0

但你的变量应该与你在urls.py文件中使用的内容相匹配。你可以使用'url(r'^ editFamily /(?P [0-9] +)/ $',views.editFamily,name ='editFamily')'然后'def editFamily(request,id):' –

回答

1

不,它不会丢失。表单被提交到同一页面,所以URL保持不变,参数仍然存在。

+0

好的谢谢!感谢提示,我没有在文档 – user3182532

2

由于您想使用除pk之外的其他变量。允许使用可变id为您提供方便
变化urls.py到

url(r'^editFamily/(?P<id>[0-9]+)/$', views.editFamily, name='editFamily') 

而且在views.py,你可以从URL路径

def editFamily(request, id): 
    obj = models.Family.objects.all().filter(pk=id) 
    if request.method == 'POST': 
     form = forms.FamilyForm(request.POST, instance=obj) 
     if form.is_valid(): 
      form.save() 
    else: 
     form = forms.FamilyForm(instance=obj) 

    return render(request, 'editFamily.html', {'form': form}) 

它是使用相同的重要访问变量名称在urls.py和views.py中,以便视图函数可以通过名称从它的url路径中选择变量。

+0

中找到涵盖的主题,您是对的。如果urls.py和views.py与参数名称不匹配,则会出错 – user3182532