Django小部件调整'render_field'不起作用

时间:2018-01-18 18:50:41

标签: python django django-forms jinja2 django-widget-tweaks

我在django中有这个表单呈现模板,render_field内的if-else无效:

{% load widget_tweaks %} 
{% for field in form %}
    <div class="form-group">
        {{ field.label_tag }} 
        {% if form.is_bound %} 
            {% if field.errors %} 
                {% render_field field class="form-control is-invalid" %} 
                {% for error in field.errors %}
                    <div class="invalid-feedback">
                        {{error}}
                    </div>
                {% endfor %} 
            {% else %} 
                {% render_field field class="form-control is-valid" %} 
            {% endif %} 
        {% else %} 
            {% render_field field class="form-control" %} 
        {% endif %} 

        {% if field.help_text %}
            <small class="form-text text-muted">
               {{ field.help_text }}
            </small>
        {% endif %}
    </div>
{% endfor %}

它呈现了这个:

enter image description here

但是,当我尝试上面代码的较小版本时,如下所示,那么它仍然不起作用:

{% load widget_tweaks %} 
{% for field in form %}
        <div class="form-group">

            {% if field.errors %}
                {% render_field field class="form-control is-invalid" %}
            {% else %}
                {% render_field field class="form-control is-valid" %}
            {% endif %}

            {% if field.help_text %}
                <small class="form-text text-muted">
                    {{ field.help_text }}
                </small>
            {% endif %}

        </div>
{% endfor %}

并呈现:

enter image description here

但当我删除所有if-else时:

{% load widget_tweaks %} 
{% for field in form %}
    <div class="form-group">
        {{ field.label_tag }} 
        {% render_field field class="form-control" %} 
        {% if field.help_text %}
            <small class="form-text text-muted">
               {{ field.help_text }}
            </small>
        {% endif %}
    </div>
{% endfor %}

然后它呈现正确:

enter image description here

但我需要if-else来检查表单错误并相应地添加错误消息,我们将不胜感激。 那么为什么render_field无法使用if-else?怎么解决这个?使用widget_tweaks呈现错误的任何其他方式或widget_tweaks的任何替代方法?

1 个答案:

答案 0 :(得分:0)

您可以使用WIDGET_ERROR_CLASS设置错误类别。

{% with WIDGET_ERROR_CLASS='my_error_class' %}
    {% render_field form.field1 %}
    {% render_field form.field2 %}
    {% render_field form.field3 %}
{% endwith %}

然后你可以添加表单错误:

{% if field.errors %}
    {% for error in field.errors %}
        <div class="invalid-feedback">
            {{error}}
        </div>
    {% endfor %} 
{% endif %}