Настройки виджета 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:

{% 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 для проверки ошибок формы и добавления сообщений об ошибках в форму соответственно, буду признателен за любую помощь. Почему же render_field не работает с if-else ? Как это решить? Любые другие способы использования widget_tweaks для отображения ошибки или любые альтернативы widget_tweaks ?


person tkhurana96    schedule 18.01.2018    source источник


Ответы (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 %}
person Ankita Gupta    schedule 18.01.2018