繁体   English   中英

表单数据未传递到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM