在Django模板中设置和访问变量值的问题

时间:2018-12-18 12:37:24

标签: python django templates

我想为表单字段中的错误设置变量err(使用 django 2.1.3 ):

{% for field in form %}
    {% if field.errors %}
        {% with field.errors as err %}{% endwith %}
    {% endif %}
{% endfor %}


{% if err %}
    <div class="alert alert-danger fade show">
        <button type="button" class="close" data-dismiss="alert"
           aria-label="Close">
            <span aria-hidden="true">&times;</span>
        </button>
        {{ err }}
    </div>
{% endif %}

但是,当渲染为html时,变量的值没有输出。不过,有些错误是我使用forms.ValidationError引发的。

也可以像这样尝试...

{% for field in form %}
    {% if field.errors %}
        <div ... >
            ...
            ...
            {{ field.errors }}
        </div>
    {% endif %}
{% endfor %}

在这种情况下,将显示输出或错误,但是包含多个<div>元素且 n 否。时代。
我知道,这可以通过views.py中的另一种方式来完成:使用'django.contrib.messages'。然后将错误发送到form.is_valid()内的 messages.error(),然后...

{% if messages %}
    {% for message in messages %}
        {{ message }}
    {% endfor %}
{% endif %}

但是,我想从forms.py文件中对其进行操作。那么,我该怎么做呢? ️️️️
提前谢谢!

1 个答案:

答案 0 :(得分:1)

with语句的作用域直到匹配的endwith为止。您的宽度是在with之后,因此该变量根本不存在。

即使可行,您仍然只定义了一个err;如果存在多个错误,则仅具有最后一个错误的值,这会破坏您要尝试执行的操作的全部目的。

您不应为此使用contrib.messages。您应该使用 form 中的错误,而不是字段中的错误。

{% if form.errors %}
    <div ... >
        ...
        ...
        {% for error in form.errors %}
        {{ error }}
        {% endfor %}
    </div>
{% endif %}

请注意,您可以通过定义ErrorList subclass来进一步自定义错误的显示方式。