我正在使用django-uni-forms来显示我的字段,其中有一个相当简陋的例子。
当我使用<form>{%csrf_tag%} {%form|as_uni_form%}</form>
呈现表单字段时,一切都按预期工作。
但是,django-uni-form Helpers允许您使用以下语法生成表单标记(以及其他与帮助程序相关的内容) - {% with form.helper as helper %}{% uni_form form helper%}{%endwith%}
- 这会为我创建<form>
标记,所以没有地方可以嵌入我自己的CSRF_token。当我尝试使用这种语法时,表单呈现完美,但没有CSRF令牌,因此每次提交表单都失败。
有没有人有这方面的经验?是否有既定的方法来添加令牌?出于重用原因,我更喜欢第二种语法。 谢谢!
答案 0 :(得分:3)
您检查过来源了吗?它应该已经存在了。 uni_form模板标签应自动包含它。
答案 1 :(得分:2)
我遇到了与django-uni-form完全相同的问题。如果我使用的话,csrf令牌不会显示在<form>
标记之后:
{% load uni_form_tags %}
{% uni_form form helper %}
或:
{% load uni_form_tags %}
{% with form.helper as helper %}
{% uni_form form helper%}
{%endwith%}
如果我手动包含它,它可以工作:
<form action='{{ request.path }}' method='POST' class="uniForm">{% csrf_token %}
{{ form|safe }}
</form>
我找到了blog post,其中概述了如何手动包含csrf令牌:
helper = FormHelper()
csrf_token = Hidden(
name = 'csrfmiddlewaretoken',
value = request.META['CSRF_COOKIE'])
helper.add_input(csrf_token)
一点也不漂亮,但至少它会让单一形式发挥作用。
答案 2 :(得分:1)
最简单的解决方案是从GitHub安装django-uni-form,直到PyPi上的版本更新为0.8。
pip install https://github.com/pydanny/django-uni-form/tarball/master
答案 3 :(得分:1)
使用最新版本的django-uni-form。它修复了这个以及更多。