簡體   English   中英

如何從Django模板發布到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM