如何从django模板发布到django中的视图?

时间:2013-07-03 18:27:46

标签: python django django-templates django-views

见下面的情景:

我有一个电子邮件订阅者/非订阅者应用。我被困在未订阅的用户部分。给用户一个链接,如果他/她跟随将能够取消订阅。该链接通常是一个视图,格式如下:

r^'/unsub_view/(?P<user_id>\w+)/$'

因此,当用户关注此链接时,他/她正在视图GET上使用参数user_id执行unsub_view请求。所以我将我的观点编码为:

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的帖子 请帮忙。

注意:如果有更好的工作流程想法,我也愿意接受,所以如果有的话,请建议。

1 个答案:

答案 0 :(得分:1)

在使用按钮渲染表单的模板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还有一个专门用于表单建模和渲染的完整框架。您可以利用它来生成表单。