BUG: При передаче переменной django.messages через HTML тег
messages.info(request, 'Attendance Ready To Be Taken!')
Здесь я использую django messages для отправки строки пользователю
{% for message in messages %}
{% if message == 'Attendance Ready To Be Taken!' %}
<div class="alert success">
<span class="closebtn">×</span>
<strong>SUCCESS!</strong> {{message}}
</div>
{% else %}
<div class="alert">
<span class="closebtn">×</span>
<strong>WARNING!</strong> {{message}}
</div>
{% endif %}
{% endfor %}
Однако, хотя строка явно та же самая... она не выводит сообщение SUCCESS.
Он может отобразить сообщение действительно... но я хочу фильтровать, если это сообщение об успехе, чтобы оно было зеленым... и сообщение об ошибке, чтобы оно было красным... просто для пользовательского интерфейса, чтобы предупредить пользователей
.alert {
padding: 20px;
background-color: #f44336;
color: white;
opacity: 1;
transition: opacity 0.6s;
margin-bottom: 15px;
}
.alert.success {background-color: #04AA6D;}
Выше приведен CSS код для стилей двух сообщений для справки.
Сообщение "Attendance ready to be taken" должно быть зеленого цвета... но на веб-странице оно красного цвета.
Полагаю, что он не выполнил условное утверждение 'if'. Поэтому он переходит в 'else' и становится красным цветом.
Но я не уверен, почему это не так. Потому что отображаемое сообщение то же самое, что и строка, с которой я его сравнивал...
Кто-нибудь знает, что вызывает эту странную ошибку? Любая помощь будет оценена по достоинству.
Вы отправили сообщение info
, поэтому его тег info
.
Для динамического применения CSS классов лучше всего использовать Message tags
.
Затем определите теги сообщений в представлении следующим образом:
messages.info(request, 'Attendance Ready To Be Taken!', extra_tags='success')
Тогда этот тег success
также станет классом в элементе динамически.
Используйте в шаблоне как:
{% if messages %}
{% for message in messages %}
<div class="alert {% if message.tags %} {{message.tags}} {% endif %}">
<span class="closebtn">×</span>
<strong>SUCCESS!</strong> {{message}}
</div>
{% endfor %}
{% endif %}
Для отправки error
сообщения, которое по умолчанию имеет тег error
:
messages.error(request, 'Attendance Not completed !', extra_tags='red')
Тогда тег red
также станет тегом class.
Шаблон может быть таким же, только нужно добавить этот css:
.red {
background-color: red;
}
Таким образом, он работает динамически.
Другое возможное решение:
Вы можете использовать MESSAGE_LEVEL
, они позволяют нам группировать сообщения по типам, чтобы их можно было фильтровать или отображать по-разному в представлениях и шаблонах. Уровень - это целое число, описывающее тип сообщения.
Level Value
DEBUG 10
INFO 20
SUCCESS 25
WARNING 30
ERROR 40
Тогда с вашим текущим кодом просто используйте проверку сообщения в шаблоне с помощью message.level == 20
, так:
{% for message in messages %}
{% if message.level == 20 %}
<div class="alert success">
<span class="closebtn">×</span>
<strong>SUCCESS!</strong> {{message}}
</div>
{% else %}
<div class="alert">
<span class="closebtn">×</span>
<strong>WARNING!</strong> {{message}}
</div>
{% endif %}
{% endfor %}