3

我正在使用 django-uni-forms 来显示我的字段,并直接从他们的书中给出了一个相当基本的示例。

当我使用 渲染表单字段<form>{%csrf_tag%} {%form|as_uni_form%}</form>时,一切都按预期工作。

但是,django-uni-form Helpers 允许您使用以下语法生成表单标签(和其他与 helper 相关的内容){% with form.helper as helper %}{% uni_form form helper%}{%endwith%}——这会<form>为我创建标签,所以没有地方可以嵌入我自己的 CSRF_token。当我尝试使用这种语法时,表单会完美呈现,但没有 CSRF 令牌,因此每次提交表单都会失败。

有人对此有经验吗?是否有既定的方法来添加令牌?出于重用的原因,我更喜欢第二种语法。谢谢!

4

4 回答 4

3

你检查过来源吗?它应该已经在那里了。uni_form 模板标签应该自动包含它。

于 2011-02-03T07:22:27.937 回答
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)

一点也不漂亮,但至少它能让制服起作用。

于 2011-02-12T11:31:20.913 回答
1

最简单的解决方案是从 GitHub 安装 django-uni-form,直到 PyPi 上的版本更新到 0.8。

pip install https://github.com/pydanny/django-uni-form/tarball/master
于 2011-04-29T22:08:42.497 回答
1

使用最新版本的 django-uni-form。它解决了这个问题以及更多问题。

于 2011-11-14T07:14:11.510 回答