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">&times;</span>   
      <strong>SUCCESS!</strong> {{message}} 
  </div> 

{% else %}
<div class="alert"> 
    <span class="closebtn">&times;</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">&times;</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">&times;</span>   
            <strong>SUCCESS!</strong> {{message}} 
            </div> 

            {% else %}
            <div class="alert"> 
            <span class="closebtn">&times;</span>   
            <strong>WARNING!</strong> {{message}} 
        </div>
    {% endif %}
{% endfor %}
Вернуться на верх