проблема с настройкой и доступом к значению переменной в шаблоне django - PullRequest
0 голосов
/ 18 декабря 2018

Я хочу установить переменную 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' .Затем отправка ошибок в messages.error () , внутри form.is_valid(), затем ...

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

Но я хочу манипулировать им из файла forms.py.Итак, как мне это сделать?10
Заранее спасибо !!

1 Ответ

0 голосов
/ 18 декабря 2018

Область действия оператора with - до соответствия endwith.Ваша конечная ширина указывается сразу после with, поэтому переменная вообще не существует.

Даже если это сработало, вы все равно определяете только один err;если есть несколько ошибок, он будет иметь значение только последней, что противоречит всей цели того, что вы пытаетесь сделать.

Вы не должны использовать contrib.messages для этого.Вы должны использовать ошибки из формы , а не из поля.

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

Обратите внимание, что вы можете дополнительно настроить способ отображения ошибок, определив подкласс ErrorList .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...