1

这是场景:

我有一个电子邮件订阅者/取消订阅者应用程序。我被困在取消订阅用户部分。用户将获得一个链接,如果他/她关注该链接,他/她将能够取消订阅。该链接通常是一个视图,格式如下:

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

因此,当用户点击此链接时,他/她正在使用参数 user_idGET对视图进行请求。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 的 POST-ing 请帮助。

注意:如果有更好的工作流程想法,我也对此持开放态度,因此请提出建议。

4

1 回答 1

1

在使用按钮呈现表单的模板 unsub.html 中,您应该使用 reverse 方法传递视图的 url


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

于 2013-07-03T22:09:45.173 回答