1. Алексей Гордиенко

    27.06.2008

    0 ↑
    0 ↓
    Новичок в Django. Недавно приступил к созданию первого тестового проекта на Django. Возник вопрос с использованием нескольких блочных тегов в базовом шаблоне. Например title. Известно, что этот тег как правило необходимо использовать в странице 2 раза, пример:

    <title>{% block title %}{% endblock %}</title>
    ...
    <h1>{% block title %}{% endblock %}</h1>


    Django вызывает исключение TemplateSyntaxError at /
    'block' tag with name 'title' appears more than once

    Как быть?
  2. Выносить в отдельный файл и инклюдить
  3. Dyadya Zed

    27.06.2008

    0 ↑
    0 ↓
    Вы можете назвать второй блок как угодно, например htitle, а переменную в нем отдавать такую же. Сама идея блоков в том, чтобы не было повторяющихся названий. Это просто именованные области вывода. Их содержимое можно переопределить в дочерних шаблонах (если это был базовый шаблон). Подробнее почитайте в Django book: http://djangobook.com

    <title>{% block title %}{{mytitle}}{% endblock %}</title>

    ...
    <h1>{% block htitle %}{{mytitle}}{% endblock %}</h1>
  4. Алексей Гордиенко

    27.06.2008

    0 ↑
    0 ↓
    Да но тогда в каждом представлении мне нужно будет объявлять переменную mytitle, и передавать ее в шаблон. А мне хотелось просто воспользоваться фичей наследования шаблонов, как это кстати описано в главе "Наследование шаблонов" в DjangoBook. Именно там в примере используется заголовок страницы подключаемый в базовый шаблон из шаблона представления.

    —Выносить в отдельный файл и инклюдить

    Если я делаю так блок вынесенный {% include 'includes/head.html'%} в этот отдельный файл не переопределяется.
  5. Свой inclusion tag

  6. Ivan Sagalaev

    28.06.2008

    0 ↑
    0 ↓

    Соглашусь с Сашей — свой inclusion tag тут как раз хорош, если title и h1 формируются по какому-то общему принципу. Или еще можно не тегом, а в контекст-процессоре передавать что-то типа:

    return {
        'title': _get_title(),
        'header': _get_title(),
    }
    
  7. Есть тикет в траке у джанги на тему множественного отображения блоков, но он давно уже "Design decision needed". Так что оптимальнее всего просто пересмотреть логику отображения информации.

  8. Алексей Гордиенко

    29.06.2008

    0 ↑
    0 ↓
    Всем спасибо за советы. Попробую разные варианты.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.