django allauth自定义消息:使用html / css设置消息样式

Max*_*ith 3 html css django django-allauth django-messages

默认情况下,Allauth的消息以文本文件的形式存储在模板目录中,它们类似于:

{% load i18n %}
{% blocktrans %}You cannot remove your primary e-mail address ({{email}}).{% endblocktrans %}
Run Code Online (Sandbox Code Playgroud)

这些使用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">&times;</span>
            </button>
            {% blocktrans %}You cannot remove your primary e-mail address ({{email}}).{% endblocktrans %}
 </div>
Run Code Online (Sandbox Code Playgroud)

但是上面的代码只是将HTML呈现为文本。我不能将HTML放在模板中,而只能在模板中做{{message}},因为我想根据每个消息的偏向(至少是颜色!)来更改其中的一些内容。

我该怎么做?谢谢!

bir*_*ilo 6

模板是消息样式标记的地方,而不是消息.txt文件。您应该能够通过Django的默认值或条件语句(如果需要)实现每个案例的变体。我看到您正在使用Bootstrap,并且在许多情况下,默认Django消息传递标签可以很好地映射到Bootstrap自己的警报类。在视图中创建消息时...

messages.success(request, 'You have logged in successfully.')
Run Code Online (Sandbox Code Playgroud)

...每个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">&times;</span>
    </button>
    {{ message }}
</div>
Run Code Online (Sandbox Code Playgroud)

如果您的消息具有级别,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,
}
Run Code Online (Sandbox Code Playgroud)

将此与Bootstrap的默认警报类和上下文格式进行比较:

引导程序默认警报类和上下文颜色

info,success以及warning类反映Django的消息的水平,但Django的最严重水平error,而引导的是danger。为了使Django的error级别消息易于在Bootstrap的alert-danger类中显示,请将DEFAULT_TAGS条目从更改ERROR: 'error'为ERROR: 'danger'。或者,也可以保持Django核心代码完整无缺,'ERROR': MESSAGES_ERROR_STRING并在您的设置文件中定义该常量。(您甚至可以创建自定义的Bootstrap类,并定义自己的Django消息级别以与其相符。)

如果您想专门使用allauth自定义内容,例如,将消息级别设置为与allauth的默认值不同(例如,将登录消息设置为infolevel而不是级别),则success可以直接在allauth.account.views(和allauth.socialaccount.views)中进行更改

您还可以将额外的标签传递给Django消息,并将其用于条件格式设置:例如,请参阅文档和此答案中的额外消息标签。

  • 2020 更新。这仍然有效,只需使用 `{{ message.tags }}` 而不是 `{{ messages.tags }}` (2认同)