You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Messages模板条件判断失效:成功消息样式不显示

问题与解决

问题详情

通过Django的messages模块发送消息:

messages.info(request, 'Attendance Ready To Be Taken!')

在模板中尝试根据消息内容判断并应用不同样式:

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

配套CSS样式:

.alert { 
    padding: 20px; 
    background-color: #f44336; 
    color: white; 
    opacity: 1; 
    transition: opacity 0.6s; 
    margin-bottom: 15px; 
} 

.alert.success {background-color: #04AA6D;}

实际效果:目标消息始终显示红色警告样式,条件判断未触发,仅消息内容正常展示。

问题原因

Django messages迭代返回的message是Message对象,而非字符串。模板中{{message}}能显示内容是因为自动调用了对象的__str__方法,但直接用message == 'Attendance Ready To Be Taken!'是对象与字符串的比较,结果永远为False,因此始终走else分支。

解决方案

方案1:直接获取消息内容字符串比较

修改模板中的判断条件,使用message.message获取消息内容:

{% for message in messages %} 
{% if message.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 %}

方案2:利用Django消息级别(更规范)

Django messages本身支持不同级别(success/info/warning/error),无需硬编码内容判断:

  1. 发送消息时使用对应级别:
messages.success(request, 'Attendance Ready To Be Taken!')
  1. 模板中根据消息的tags属性设置样式:
{% for message in messages %}
  <div class="alert {{ message.tags }}">
    <span class="closebtn">&times;</span>   
    <strong>{{ message.tags|upper }}!</strong> {{ message }}
  </div>
{% endfor %}

此方案中,message.tags会自动携带success标识,匹配CSS中的.alert.success样式,同时也能兼容其他消息级别的样式扩展。


内容的提问来源于stack exchange,提问作者Louis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:30:52