2

我的应用程序使用 django 的消息传递中间件。

在这个应用程序的基本模板中,我有:

{% extends "base.html" %}

{% block messages %}
<ul class="messagelist">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}_message"{% endif %}>{{ message|capfirst }}</li>
    {% endfor %}
</ul>
{% endblock messages %}

问题是这会覆盖站点范围内的“消息”块base.html

因此,如果我在站点库中定义了样式,如下例所示:

{% block messages %}
{% if messages %}
    <ul class="messagelist ui-state-highlight">
    {% for message in messages %}
        <li{% if message.tags %} class="{{ message.tags }}_message"{% endif %}>{{ message|capfirst }}</li>
    {% endfor %}
    </ul>
{% endif %}
{% endblock messages %}

我的“可重复使用”模板将删除ui-state-highlight...

只有在未定义的情况下,我才能在我的应用程序的基础中定义阻止消息?

4

1 回答 1

3

如果我按照您要执行的操作-编写一个应用程序,该应用程序将在需要时为该块提供内容,但如果可用,则使用其父模板的块-我认为应该这样做:

{% extends "base.html" %}
{% block messages %}
    {% if block.super %}
        {{ block.super }}
    {% else %}
        <ul class="messagelist">
        {% for message in messages %}
            <li{% if message.tags %} class="{{ message.tags }}_message"{% endif %}>{{ message|capfirst }}</li>
        {% endfor %}
        </ul>
    {% endif %}
{% endblock %}

不过,这是未经测试的——这可能会很block.super奇怪。而且它不会区分您的父模板根本没有定义messages块和定义空块。

于 2013-08-09T20:19:59.270 回答