模板是消息样式标记的位置,而不是消息.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
,所以引导会显示绿色警报。如果状态为info
,则它将是alert-info
和蓝色等。
Django默认的信息水平字符串表示在django/contrib/messages/constants.py
定义:
info
,success
和warning
类反映Django的消息:
DEFAULT_TAGS = {
DEBUG: 'debug',
INFO: 'info',
SUCCESS: 'success',
WARNING: 'warning',
ERROR: 'error',
}
DEFAULT_LEVELS = {
'DEBUG': DEBUG,
'INFO': INFO,
'SUCCESS': SUCCESS,
'WARNING': WARNING,
'ERROR': ERROR,
}
与引导的default alert classes和上下文格式化比较一下级别,但Django最严重的级别是error
而Bootstrap的是danger
。为了使Django的error
级消息在Bootstrap的alert-danger
类中轻松显示,请将DEFAULT_TAGS
条目从ERROR: 'error'
更改为ERROR: 'danger'
。或者保持Django核心代码不变,如'ERROR': MESSAGES_ERROR_STRING
,并在设置文件中定义该常量。 (你甚至可以创建自定义的Bootstrap类并定义你自己的Django消息级别以符合这些。)
如果你想与allauth专门定制的东西,例如从allauth的默认设置不同的消息级别 - 比如说,登录消息info
水平,而不是success
- 您可以直接在allauth.account.views
(和allauth.socialaccount.views
改变它们)
您也可以将额外的标签传递给Django消息并将其用于条件格式化:例如,请参阅extra message tags文档和this answer。
您说:“或者保持Django核心代码完好无损,如'错误':MESSAGES_ERROR_STRING并在您的设置文件中定义该常量”但这需要更改django核心代码,不是吗?除此之外,谢谢你的详细解答! –
是的,尽管这意味着您仍然可以使用默认值运行在同一个Django安装中的任何其他项目,方法是在每个项目的设置文件中定义它。此外,它使得变更更加明确可维护性而不是掩埋它。这是一种方式。 – birophilo