【问题标题】:Error message not working as expected in Django错误消息在 Django 中未按预期工作
【发布时间】:2020-09-08 22:42:36
【问题描述】:

我正在尝试显示有关订单创建成功或失败的消息。对于messages.success(request, "My message"),它按预期工作。但是对于messages.error(request, "My message"),它并不像预期的那样。我阅读了 django 消息框架文档,但没有用。谁能告诉我为什么会这样

成功消息:

失败消息: 如果我没记错的话,这应该是红色警报。 这是我的 html 文件。

base.html

<main role="main" class="container"  >
  {% if messages %}
    {% for message in messages %}
      <div class="alert alert-{{ message.tags }}">
        {{ message }}
      </div>
    {% endfor %}
  {% endif %}

views.py

if verify:
        if response_dict['RESPCODE'] == '01':
            messages.success(
                request, "Thank you for ordering! Your items will be delivered soon")
            return redirect(reverse('update-records', kwargs={'order_id': order_id}))
        else:
            messages.error(
                request, "Your order could not be placed, here are the details:   " + response_dict['RESPMSG'])
        return redirect(reverse('profile-page'))

【问题讨论】:

  • 尝试在您的 div 中打印 {{ message.tags }}。是否打印正确的 css 类
  • 它只会根据失败/成功显示标签名称,即'success' for message.success &amp; 'error' for message.error
  • 所以alert-error 类正在申请?如果您尝试像这样制作静态 div:&lt;div class="alert alert-error"&gt; red alert worked &lt;/div&gt; 它会以红色显示警报吗?

标签: python django django-messages


【解决方案1】:

如果问题是alert-error 不起作用,您可以在收到消息的导入声明后使用它:

from django.contrib.messages import constants as messages
MESSAGE_TAGS = {
    messages.ERROR: 'danger'
}

参考->

https://docs.djangoproject.com/en/3.0/ref/contrib/messages/#message-tags

【讨论】:

  • 它不起作用,我收到了和以前一样的错误消息from django.contrib import messages MESSAGE_TAGS = { messages.ERROR: 'danger' }
  • 上述方法没有覆盖错误-->危险。检查打印message.tags...它仍然显示消息标签为 error 意味着它仍然是alert-error
  • 抱歉导入不同,我也更新了答案 - from django.contrib.messages import constants as messages
  • 即使这样也没有用。我什至在你建议之前就试过了,检查了你分享的文档,所以回到了旧的硬编码方式。 模块 'django.contrib.messages.constants' 没有属性 'error' 如果我们尝试导入 from django.contrib.messages import constants as messages 会收到此错误
【解决方案2】:

@Sowjanya R Bhat

您建议的方法可以进行硬编码,但我需要知道,为什么它不实施我的默认红色警报。但是您的建议有效

<main role="main" class="container"  >
  {% if messages %}
    {% for message in messages %}
      {% if message.tags == "error"%}
      <div class="alert alert-danger">
        {{ message }}
      </div>
      {% else %}
      <div class="alert alert-success">
        {{ message }}
      </div>
      {% endif %}
    {% endfor %}
  {% endif %}

【讨论】:

  • 你可以看到你在这里展示的是使用 alert-danger class 。但是来自您的后端的是 alert-error class 。我在问你硬编码时alert-error 是否有效?
  • 不,这 alert-error 不起作用。只有alert-danger 有效,不知道为什么..!!!
  • 因为 bootstrap 内置了 alert-danger 类而不是 alert-error
【解决方案3】:
In your HTML:

<script>
  setTimeout(function () {
   $('#flash').fadeOut('fast');
   },5000);
</script> 

<div id="flash">
         {% if messages %}
              {% for message in messages %}
                       <div class="alert alert-{{ message.tags}} m-0" role="alert">
                              <strong>{{ message }}</strong>
                        </div>
              {% endfor %}
         {% endif %}
 </div>

in django settings.py:

from django.contrib.messages import constants as messages
MESSAGE_TAGS = {
    messages.ERROR: 'danger'
}

in django views:

    from django.contrib import messages

    if verify:
        if response_dict['RESPCODE'] == '01':
            messages.success(
                request, "Thank you for ordering! Your items will be delivered soon")
            return redirect(reverse('update-records', kwargs={'order_id': order_id}))
        else:
            messages.error(
                request, "Your order could not be placed, here are the details:   " + response_dict['RESPMSG'])
        return redirect(reverse('profile-page'))

【讨论】:

    【解决方案4】:

    只需改用messages.warning,它至少会显示一种颜色。

    【讨论】:

      【解决方案5】:

      这是因为alert-error 不是引导类。 相应的类被命名为alert-danger

      通常,标签在 bootstrap 和 django 之间排列得很好,这就是您的代码有效的原因。但正如你看到的“错误”!=“危险”。

      解决问题替换

      <div class="alert alert-{{ message.tags }}">
          {{ message }}
      </div>
      

      {% if message.tags == "error" %}
          <div class="alert alert-danger">
              {{ message }}
          </div>
      {% else %}
          <div class="alert alert-{{ message.tags }}">
              {{ message }}
          </div>
      {% endif %}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-25
        • 2015-07-19
        • 2018-07-08
        • 1970-01-01
        • 1970-01-01
        • 2019-05-25
        相关资源
        最近更新 更多