Добавить на сайт ‹title› в шаблоне Django с помощью block.super

У меня есть 3 шаблона Django:

base.html

<title>{% block title %} SITE NAME {% endblock %}</title>

default.html

{% extends "base.html" %}
{% block title %} {{ block.super }} - SECTION NAME {% endblock %}

main.html

{% extends "default.html" %}
{% block title %} {{ block.super }} {% endblock %}

Я хочу получить НАЗВАНИЕ САЙТА в шаблоне main.html, то есть содержание родительского блока родительского блока. Что-то типа

{{ block.super.super }}

Это возможно?


person San4ez    schedule 01.12.2010    source источник


Ответы (3)


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

В противном случае вы могли бы определить SITE_NAME в своем settings.py и иметь процессор контекста, например

from django.conf import settings
def site_name(request):
    return {'SITE_NAME': settings.SITE_NAME}

так что вы можете использовать {{ SITE_NAME }} в своих шаблонах - это может иметь смысл, потому что имя сайта может быть полезно и в других местах ...

person Bernhard Vallant    schedule 01.12.2010

Обратите внимание: похоже, что Django 1.2.3 уже делает то, что вы хотите. Предполагая, что SITE_NAME предоставляется через context_preprocessor, как показывает lzerscience, block.super должен предоставлять его через все уровни наследования.

main.html

{% extends "default.html" %}
{% block title %} {{ block.super }} - MAIN{% endblock %}

Это отображает для меня заголовок «НАЗВАНИЕ САЙТА - НАЗВАНИЕ РАЗДЕЛА - ГЛАВНЫЙ».

person Cerin    schedule 20.12.2010

Django 1.6.6

{{ block.super.super }} - возможно

Пробую сейчас - заработало :) Но не официально ...

person Oleksandr    schedule 15.09.2014