繁体   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