django allauth自定义消息:使用html / css

时间:2017-05-29 23:55:31

标签: html css django django-allauth django-messages

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">&times;</span>
            </button>
            {% blocktrans %}You cannot remove your primary e-mail address ({{email}}).{% endblocktrans %}
 </div>

但上面的代码只是将HTML呈现为文本。我不能把这个HTML放在模板中,只是在模板中做{{message}}因为我想在每个消息偏差上改变一些(至少是颜色!)。

我怎么能做到这一点? 谢谢!

1 个答案:

答案 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">&times;</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和上下文格式进行比较:

Bootstrap default alert classes and contextual colours

infosuccesswarning类反映了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 tagsthis answer