![](/img/trans.png)
[英]Data from POST request not passed from template/form to view in 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.