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 %}

問題は、これが site-scoped の '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 に答える