Может ли шаблон содержать блок в сценарии {% if %} и {% else %}

У меня есть базовый шаблон с определенным условным заголовком:

{% if blah %}
    <h1>Title 1</h1>
{% else %}
    <h1>Title 2</h1>
{% endif %}

Есть ли в шаблонах техника/функция, которая позволила бы вам установить заголовок в шаблоне, который простирается от базы?

Очевидно, что вы не можете использовать традиционный блочный тег, поскольку они могут появляться только один раз, но есть ли что-то, что вы могли бы сделать, чтобы эффективно получить {% block title %} для каждого <h1>, чтобы любой заголовок, отображаемый из if, был изменен расширяющим шаблоном?

Чтобы быть более конкретным, код шаблона, который у меня есть в базе:

<div class="wrapper">
    {% if request.current_page.get_ancestors|length <= 1 %}
        {% block page_title %}
        <h1>{{ request.current_page.get_page_title }}</h1>
        {% endblock page_title %}
    {% else %}
        {% for ance in request.current_page.get_ancestors %}
            {% if ance.level == 1 %}
            {% block page_title %}
                <h1>{{ ance.get_page_title }}</h1>
            {% endblock page_title %}
            {% endif %}
        {% endfor %}
    {% endif %}
</div>

Изменить

Полный код базового шаблона; http://pastebin.com/cyWAiWn2

Полный код расширяемого шаблона; http://pastebin.com/ThEqff47

Причина этого требования к функциональности заключается в том, что в django-cms я создаю страницу и подключаю свое приложение к этой странице. На этом этапе {{ request.current_page.get_page_title }} просто вернет заголовок страницы django-cms, которую я создал.

Если вы сделали что-то на этой странице, из-за чего подключенное приложение отправило вас в другое представление/шаблон, вы фактически не меняете страницу в django-cms, поэтому get_page_title остается прежним, но шаблон, который вы сейчас отобразили, будет почти всегда разные названия.

Очевидно, вы можете включить новый заголовок страницы в виде <h2> или чего-то еще и поместить его под <h1> из base_content.html, но базовый заголовок обычно лишний для необходимого содержимого страницы на этом уровне.


person markwalker_    schedule 09.07.2014    source источник


Ответы (1)


Если у вас есть только одна основная надпись, вы можете использовать обычный тег блока в расширяющемся шаблоне, чтобы переопределить заголовок.

<div class="wrapper">
    {% block title %}
        {% if request.current_page.get_ancestors|length <= 1 %}
            <h1>{{ request.current_page.get_page_title }}</h1>
        {% else %}
            {% for ance in request.current_page.get_ancestors %}
                {% if ance.level == 1 %}
                    <h1>{{ ance.get_page_title }}</h1>
                {% endif %}
            {% endfor %}
        {% endif %}
    {% endblock title %}
</div>

Я не вижу необходимости в двух основных заголовках в вашем шаблоне. Не могли бы вы привести пример переопределяющего шаблона, в котором нужно было бы определить две основные надписи?

person Iain Shelvington    schedule 09.07.2014
comment
Я добавил две ссылки pastebin в шаблоны. Как видите, базовый шаблон отображает страницу двумя разными способами в зависимости от свойства страницы. Я не думаю, что один блок подходит для того, что я ищу. - person markwalker_; 09.07.2014