更改默认的Django消息标记

时间:2016-04-27 19:44:41

标签: python html django

默认情况下,messages.success输出class='success'。我需要覆盖它,删除它或将我的标签附加到它以满足我的需要。我找不到覆盖和追加它的方法一直没有成功。在这里,我尝试使用extra_tags ...

views.py

messages.success(request, '<a href="#">Item</a> Saved', extra_tags='html_safe alert alert-')

detail.html

我尝试在alert之前添加{{ message.tags }}

{% if messages %}
<ul class='messages'>
    {% for message in messages %}
    <li{% if message.tags %} class='{{ message.tags }}' role='alert'{% endif %}>{% if 'html_safe' in message.tags %}{{ message|safe }}{% else %}{{ message }}{% endif %}</li>
    {% endfor %}
</ul>
{% endif %}

Bootstrap Alerts需要class='alert alert-success'

<div class="alert alert-success" role="alert">
    <strong>Well done!</strong> You successfully read this important alert message.
</div>

HTML页面源结果

当执行上述所有代码时,源代码输出以下内容。现在唯一的问题是alert-success之间的空格。

<ul class='messages'>
    <li class='html_safe alert alert- success' role='alert'><a href="#">Item</a> Saved</li>
</ul>

结束目标! - 任何人都可以在这里看到一个hacky或正确的解决方法吗?

<li class="html_safe alert alert-success" role="alert"><a href="#">Item</a> Saved</li>

1 个答案:

答案 0 :(得分:4)

我不明白为什么有理由将其删除。未使用的CSS类并不是一件可怕的事情。将其更改为:

messages.success(request, '<a href="#">Item</a> Saved', extra_tags='html_safe alert alert-success')

并且不用担心额外的success课程。你有没有检查过Django的源代码?有时它会提供有关可以传递的额外kwargs的提示。最终结果将是:

<li class="html_safe alert alert-success success" role="alert"><a href="#">Item</a> Saved</li>

似乎还有configure the default message tags的方式。

例如,在settings.py

from django.contrib.messages import constants as messages
MESSAGE_TAGS = {
    messages.SUCCESS: 'alert alert-success',
}

但是有些Django项目和文档可能会认为这里的标记是success,默认情况下,所以只有在你确信它是你需要的时候才改变它。否则,只需将Bootstrap类添加为额外标记即可。实际上,你不应该只是为了适应Bootstrap而覆盖Django的默认值。要么在customizationsuccess期间更改Bootstrap的成功等级,要么只使用两者。