2017-07-31 39 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