见下面的情景:
我有一个电子邮件订阅者/非订阅者应用。我被困在未订阅的用户部分。给用户一个链接,如果他/她跟随将能够取消订阅。该链接通常是一个视图,格式如下:
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的帖子 请帮忙。
注意:如果有更好的工作流程想法,我也愿意接受,所以如果有的话,请建议。
答案 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还有一个专门用于表单建模和渲染的完整框架。您可以利用它来生成表单。