![](/img/trans.png)
[英]Data from POST request not passed from template/form to view in django
[英]How to post to a view in django from a django template?
這是場景:
我有一個電子郵件訂閱者/取消訂閱者應用程序。 我一直在取消訂閱用戶部分。 為用戶提供了一個鏈接,如果他/她關注該鏈接,則可以取消訂閱。 鏈接通常是一個視圖,格式如下:
r^'/unsub_view/(?P<user_id>\w+)/$'
因此,當用戶點擊此鏈接時,他/她正在對帶有參數user_id的視圖unsub_view
進行GET
請求。 因此,我將視圖編碼為:
def unsub_view(request, user_id):
if request.method == 'GET':
### Do some DB lookup to determine if it is a valid user or not
if user_is_valid:
return direct_to_template(request, '/app/unsub.html', {'user': user})
現在,當有效用戶正在執行GET
,將顯示一個確認對話框以及一個按鈕。 如果他/她單擊按鈕,則我希望模板將'user'
到同一視圖,因此unsub_view
也具有以下代碼:
if request.method == 'POST':
if user_is_subscribed:
#Unsubscribe the user.
else:
#Show error meessage.
我的問題是如何在模板中發布按鈕以發布到該視圖? 我環顧四周,但我收到了.php或.asp的帖子,請幫忙。
注意:如果有更好的工作流程構想,我也願意接受,因此請提出建議。
在模板unsub.html使用按鈕呈現表單的模板中,您應該使用反向方法傳遞視圖的網址
from django.code.urlresolvers import reverse
def unsub_view(request, viewid):
if request.method == 'POST':
if user_is_subscribed:
#Unsubscribe the user.
submit_url = reverse('unsub_view', viewid)
return direct_to_template(request, '/app/unsub.html', {'user': user, 'submit_url'})
else:
#Show error meessage.
然后,您可以在模板中呈現如下形式的表單:
...
<form method='post' action='{{ submit_url }}'>
{% csrf_token %}
<input type="hidden" value="{{ user_id }}" name="user_id" />
<input type="submit" value="unsubscribe"/>
</form>
...
Django還有一個完整的框架,專門用於表單建模和渲染。 您可以利用它來生成表單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.