模板是消息样式标记的地方,而不是消息.txt
文件。如果需要,您应该能够通过 Django 的默认值或条件语句来实现每个案例的变化。我看到您正在使用 Bootstrap,对于许多用例,默认的 Django 消息传递标签很好地映射到 Bootstrap 自己的警报类。在视图中创建消息时...
messages.success(request, 'You have logged in successfully.')
...每个 Django 消息都包含其级别(等)的字符串表示形式'info'
,'success'
作为标签属性。您可以将这些标签属性用于许多上下文格式设置需求。因此,您可以将其传递给(例如基本)模板,例如:
<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 的默认警报类和上下文格式进行比较:

info
,success
和warning
类镜像 Django 的消息级别,因此这些消息将自动获得 Bootstrap 的正确格式。但是 Django 最严重的级别是error
,而 Bootstrap 是danger
.
对于这种名称冲突,建议的解决方法是:保持 Django 模板标签不变,这将为元素提供一个名为alert-error
. 然后在您的 HTML 模板中的某处使用几行 Javascriptalert-danger
作为额外类添加到这些元素:
// Javascript somewhere in your HTML template
let errorElements = document.getElementsByClassName('alert-error');
[...errorElements].forEach(el => {el.classList.add('alert-danger')});
这会将“alert-danger”类添加到具有“alert-error”类的元素中。Bootstrap 将忽略“alert-error”,但是将“alert-danger”添加到元素的类列表中,它们将获得 Bootstrap 的红色上下文格式。
如果您想使用 allauth 专门定制一些东西,例如设置与 allauth 的默认值不同的消息级别 - 例如,登录消息作为info
级别而不是success
- 您可以直接在allauth.account.views
(and allauth.socialaccount.views
) 中更改它们。
您还可以将额外的标签传递给 Django 消息并将它们用于条件格式:例如,请参阅文档中的额外消息标签和此答案。
(编辑:删除了关于更改 Django 核心代码的原始想法 - 不好。)