[英]Data from POST request not passed from template/form to view in django
[英]Form data doesn't be passed to view in Django
我无法在Django中的模板中查看发布数据。
Django的错误消息是:
“ CSRF验证失败。请求中止。”
这是我的代码:
提交表格:
<form action="/submitted/" method="post">
{% csrf_token %}
*.... User input some data ....*
</form>
结果页(test.html):
<body>
{{ passed_dict }}
</body>
view.py
from django.core.context_processors import csrf
from django.template import RequestContext
def submitted(request):
passed_dict = {}
if request.method == 'POST':
passed_dict.update(csrf(request))
''' get the data from post and do things '''
else:
passed_dict['result'] = 'this_is_result'
## no matter what thing did, back to the original page.
return render(request, 'group_detail.html', passed_dict)
我遵循Django网站上的设置指南,但仍然无法正常工作。
我错过了什么 ?
您需要传递上下文,例如。 ( https://docs.djangoproject.com/en/dev/ref/templates/api/#subclassing-context-requestcontext )
return render_to_response('my_template.html',
passed_dict,
context_instance=RequestContext(request))
无需查看POST数据。 问题很明显:您首先没有在生成表单的视图中传递CSRF令牌。 如果它不在生成的表单中,那么它将不在POST数据中。
Django中通常的模式是使用相同的视图来生成表单并处理POST,但是您似乎已经将它们拆分了。 您需要在两个视图中传递令牌。 请注意,执行此操作的通常方法是使用RequestContext(或render
快捷方式),而不是将其手动添加到上下文中。
编辑 OK,所以这是第三次出现问题的步骤是在GET上呈现表单- 您没有在其中传递CSRF令牌 。 同样,如上所述,您根本不应该手动添加它,而应使用render
快捷方式确保运行上下文处理器: render(request, 'group_detail.html', passed_dict)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.