Allauth默认情况下,消息作为文本文件存储在模板目录中,它们类似于:
{% load i18n %}
{% blocktrans %}You cannot remove your primary e-mail address ({{email}}).{% endblocktrans %}
这些使用django的模板标签,但不是“HTML友好”。 我想对这些进行设计并具有类似的内容:
{% load i18n %}
<div class="alert alert-danger alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
{% blocktrans %}You cannot remove your primary e-mail address ({{email}}).{% endblocktrans %}
</div>
但上面的代码只是将HTML呈现为文本。我不能把这个HTML放在模板中,只是在模板中做{{message}}因为我想在每个消息偏差上改变一些(至少是颜色!)。
我怎么能做到这一点? 谢谢!
答案 0 :(得分:5)
模板是消息样式标记的位置,而不是消息.txt
文件。您应该能够通过Django的默认值或条件语句(如果需要)实现每个案例的变体。我看到你正在使用Bootstrap,对于许多用例,默认的Django消息传递标签很好地映射到Bootstrap自己的警报类。在视图中创建消息时...
messages.success(request, 'You have logged in successfully.')
...每个Django消息都包含其级别('info'
,'success'
等)的字符串表示形式tags attribute。您可以将这些标记属性用于许多上下文格式化需求。因此,您可以将其传递给(例如基础)模板,如:
<div class="alert alert-{{ messages.tags }} alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
{{ message }}
</div>
如果您的消息的级别为success
,则此处呈现的CSS类将为alert-success
,因此Bootstrap将显示绿色警报。如果状态为info
,则状态为alert-info
,蓝色等等。
Django的默认消息级别和字符串表示在django/contrib/messages/constants.py
中定义:
DEFAULT_TAGS = {
DEBUG: 'debug',
INFO: 'info',
SUCCESS: 'success',
WARNING: 'warning',
ERROR: 'error',
}
DEFAULT_LEVELS = {
'DEBUG': DEBUG,
'INFO': INFO,
'SUCCESS': SUCCESS,
'WARNING': WARNING,
'ERROR': ERROR,
}
将此与Bootstrap的default alert classes和上下文格式进行比较:
info
,success
和warning
类反映了Django的消息级别,但Django的最严重级别是error
,而Bootstrap是danger
。要在Bootstrap的error
课程中轻松显示Django的alert-danger
级别消息,请将DEFAULT_TAGS
条目从ERROR: 'error'
更改为ERROR: 'danger'
。或者保持Django核心代码不变,如'ERROR': MESSAGES_ERROR_STRING
并在设置文件中定义该常量。 (您甚至可以创建自定义Bootstrap类并定义自己的Django消息级别以与这些类型相符。)
如果你想用allauth专门定制一些东西,例如从allauth的默认值设置不同的消息级别 - 比如,登录消息为info
级而不是success
- 你可以直接在{ {1}}(和allauth.account.views
)
您还可以将额外的标签传递给Django消息并将其用于条件格式:例如,请参阅文档中的extra message tags和this answer。