django-uni-form助手与POST中的CSRF标签
我正在使用django-uni-forms来显示我的表单字段,例子是直接来自他们的书,比较简单。
当我用 <form>{%csrf_tag%} {%form|as_uni_form%}</form>
来渲染表单字段时,一切都正常。
不过,django-uni-form的助手功能允许我用另一种语法来生成表单标签(还有其他相关内容),就是 {% with form.helper as helper %}{% uni_form form helper%}{%endwith%}
。这样可以自动为我创建 <form>
标签,但我就没地方放自己的CSRF令牌了。当我尝试使用这种语法时,表单渲染得很好,但没有CSRF令牌,所以每次提交表单都会失败。
有没有人有过类似的经验?有没有什么固定的方法可以添加这个令牌?我更喜欢第二种语法,因为可以重复使用。谢谢!
4 个回答
1
最简单的办法是从GitHub上安装django-uni-form,直到PyPi上的版本更新到0.8。
pip install https://github.com/pydanny/django-uni-form/tarball/master
2
我在使用django-uni-form的时候遇到了同样的问题。就是在<form>
标签后面,csrf令牌没有显示出来,如果我使用:
{% 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>
我找到了一篇博客文章,里面讲了怎么手动加上csrf令牌:
helper = FormHelper()
csrf_token = Hidden(
name = 'csrfmiddlewaretoken',
value = request.META['CSRF_COOKIE'])
helper.add_input(csrf_token)
虽然看起来不太美观,但至少这样可以让uni-form正常工作。
3
你有没有查看过源代码?它应该已经在那里了。uni_form 模板标签应该会自动包含它。