Виджет Django настраивает 'render_field' не работает

У меня есть этот шаблон рендеринга формы в 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 %}

И это делает это:

введите описание изображения здесь

Но когда я пробую уменьшенную версию вышеприведенного кода, например, следующую, тогда она все равно не работает:

{% 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 %}

И оказывает это:

введите описание изображения здесь

Но когда я удаляю все if-else "S:

{% 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 %}

Тогда он правильно отображает:

введите описание изображения здесь

Но мне нужно if-else 's для проверки ошибок формы и добавления сообщений об ошибках в форму соответственно, оценят любую помощь. Так почему же render_field не работает с if-else ? Как решить это? Любые другие способы использования widget_tweaks сделать ошибку или любую альтернативу widget_tweaks ?

1 ответ

Ты можешь использовать 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 %}
Другие вопросы по тегам