简体   繁体   English

错误消息在 Django 中未按预期工作

[英]Error message not working as expected in Django

I am trying to display a message on order creation success or failure.我正在尝试显示有关订单创建成功或失败的消息。 For messages.success(request, "My message") it is working as expected.对于messages.success(request, "My message")它按预期工作。 But for messages.error(request, "My message") it is not as expected.但是对于messages.error(request, "My message")它并不像预期的那样。 I read the django messages framework docs, but no use.我阅读了 django 消息框架文档,但没有用。 Can someone tell me why is this happening谁能告诉我为什么会这样

Success Message:成功讯息: 成功讯息

Failed Message:失败消息: 失败的消息 This is supposed to be red alert if I am not wrong.如果我没记错的话,这应该是红色警报。 Here's my html file.这是我的 html 文件。

base.html底座.html

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

views.py视图.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'))

If the problem is alert-error not working you can use this after have the import statement of your message:如果问题是alert-error不起作用,您可以在收到消息的导入语句后使用它:

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

Reference ->参考->

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

@Sowjanya R Bhat @Sowjanya R 巴特

The method you suggest can be hardcoded but I need to know, why isn't it implementing red alert my default.您建议的方法可以进行硬编码,但我需要知道,为什么它不实现我的默认红色警报。 Your suggestion works however但是,您的建议有效

<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 %}
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'))

just use messages.warning instead, it would at least show a color.只需使用messages.warning代替,它至少会显示一种颜色。

This is because alert-error is not a bootstrap class.这是因为alert-error不是引导程序 class。 The according class is named alert-danger .相应的 class 被命名为alert-danger

Generally the tags line up nicely between bootstrap and django, this is why your code works.通常,标签在引导程序和 django 之间排列得很好,这就是您的代码有效的原因。 But as you see "error".= "danger".但正如你看到的“错误”。=“危险”。

To fix the issue replace要解决问题,请更换

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

with

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM