消息标签的 Django 顺序

Django order of message tags

我想知道是否可以更改带有额外标签的 django 消息的消息标签的顺序。

from django.contrib import messages
messages.success(request, 'success message', extra_tags='safe')

在我的模板中我使用

{% if messages %}
  {% for message in messages %}
    <div class="alert alert-{{ message.tags }}">
     {% if 'safe' in message.tags %}{{ message|safe }}{% else %}{{ message }}{% endif %}
    </div>
  {% endfor %}
{% endif %}

这样 div 的 class 将是:

<div class="alert alert-safe success">

但我想切换这两个标签,这样我就可以使用 bootstrap class。

<div class="alert alert-success safe">

这可能吗?

tags 属性 在 Message class 中定义并硬编码顺序。我认为更改它会很棘手。

另一种方法是在模板中使用 {{ message.level_tag }}{{ message.extra_tags }} 而不是 {{ message.tags }}

<div class="alert alert-{{ message.level_tag }} {{ message.extra_tags|default_if_none:'' }}">

如果您没有在 CSS 中使用 safe class,您可以删除 {{ message.extra_tags|default_if_none:'' }} 部分。

另一种方法是在视图中使用类似 mark_safe or format_html 的方法:

messages.success(request, mark_safe('success message'))

那么你就不需要在模板中勾选message.extra_tags:

{% for message in messages %}
  <div class="alert alert-{{ message.tags }}">
   {{ message }}
  </div>
{% endfor %}