您可以使用郵政/重定向/獲取設計模式(PRG)。有關Post/Redirect/Get的更多一般信息,請參閱以下內容:http://en.wikipedia.org/wiki/Post/Redirect/Get這裏有一些很好的工藝流程圖。
實施PRG可能看起來像下面這樣的觀點的一般示例:
# urls.py
urlpatterns = patterns('',
url(r'^/$', views.my_view, name='named_url'),
)
# forms.py
class MyForm(forms.Form):
pass # the form
# views.py
def my_view(request, template_name='template.html'):
""" Example PostRedirectGet
This example uses a request context, but isn't
necessary for the PRG
"""
if request.POST:
form = MyForm(request.POST)
if form.is_valid():
try:
form.save()
# on success, the request is redirected as a GET
return HttpResponseRedirect(reverse('named_url'))
except:
pass # handling can go here
else:
form = MyForm()
return render_to_response(template_name, {
'form':form
}, context_instance=RequestContext(request))
如果你需要做一些更有趣的使用GET,reverse
可以採取指定參數和kwargs。操縱視圖參數,url_pattern和反向調用以顯示您希望看到的結果。
另外需要注意的是,您不必重定向到相同的視圖(如本例所示)。它可以是您想要將用戶重定向到的任何命名視圖。
非常感謝。你說「不總是」,爲什麼呢? – xpanta 2012-02-15 10:18:49
由用戶的瀏覽器發送推薦人。有些瀏覽器沒有,或者有一個選項可以禁用它 - 特別是Opera。另一個解決方案可能是將當前路徑作爲隱藏輸入包含在窗體中,並在request.POST中查找該值。 – AdamKG 2012-02-15 10:26:21