Подтвердить что ты не робот

Добавить в сайт <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 }}

Возможно ли это?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

main.html

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

Это отображает для меня название "ИМЯ САЙТА - НАЗВАНИЕ СЕКЦИИ - ГЛАВНОЕ".

Ответ 3

Django 1.6.6

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

Я сейчас пытаюсь - работал:) Но официально не...