Сайт с уникальным оформлением главной страницы в шаблонах Django

#html #django #django-templates

#HTML #django #django-шаблоны

Вопрос:

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

 -base.html
  -basehome.html (inherits from base.html)
  -basesecond.html (inherits from base.html)
    -about.html (inherits from basesecond.html)
    -etc...
  

Итак base.html содержит html-объявление и структуру. Basehome.html и basesecond.html содержит различные структуры заголовков и различные другие страницы на сайте, унаследованные от basesecond.html .

Итак, проблема, с которой я продолжаю сталкиваться, заключается в том, что мне кажется, что мне нужно поместить блок внутри блока для обработки основного содержимого, которое, очевидно, содержит (самый дальний) дочерний шаблон. Насколько я знаю, Django не позволяет вам этого делать.

base.html—

 <html>
    <head>
        <title>Mysite</title>
     </head>
    <body id="{% block bodyholder %}{% endblock %}">
        <div id="hd">{# start of hd #}
            {% block hd %}{% endblock %}
        </div>{# end of the hd #}
        <div id="bd">{# start of body #}
            {% block bd %}{% endblock %}
        </div>{# end of body #}             
    </body>
</html>
  

basehome.html—

 {% extends "base.html" %}

{% block bodyholder %}bodyhome{% endblock %}

{% block hd %}
    big logo and wide header
{% endblock %}

{% block bd %}
    homepage body content
    this part works just like I want it to.
{% endblock %}
  

basesecond.html—

 {% extends "base.html" %}

{% block bodyholder %}bodysecond{% endblock %}

{% block hd %}
    small logo and narrow header
{% endblock %}

{% block bd %}
    second page body content
    here is where I want to put extra blocks like
    {% block unique about page sidebar %}{% endblock %}
    but it breaks the template system
{% endblock %}
  

Каков наилучший способ решения этой проблемы?

Комментарии:

1. В чем проблема? Это работает именно так, как вы описываете.

2. Действительно, нет никаких проблем с вложением подобных блоков в шаблоны Django. Вы получаете сообщение об ошибке?

3. При использовании шаблонов Django следует помнить о том, что блок, содержащийся в дочернем шаблоне, может переопределять или расширять блок в родительском шаблоне. Иногда я вставлял пустые блоки в дочерний шаблон, чтобы переопределить родительский блок и исключить необходимость добавления кода в каждый дочерний шаблон. Система шаблонов довольно гибкая. Я думаю, вы, вероятно, можете поместить свой блок боковой панели в родительский шаблон и заполнить его только на своей странице «о программе» без каких-либо проблем.

4. Ребята, спасибо за весь вклад. Каков S.O. способ признать, что вы допустили глупую ошибку в своем вопросе? Похоже, я дважды повторно использовал название блока. Я получал TemplateSyntaxError.

Ответ №1:

Если вы используете именно то, что вы показали, вам нужно переписать небольшую часть:

вместо этого

 {% block unique about page sidebar %}{% endblock %}
  

замените его этим

 {% block unique %}{% endblock %}
{% block about %}{% endblock %}
{% block page %}{% endblock %}
{% block sidebar %}{% endblock %}
  

В остальном все выглядит так, как должно работать. Какие коды ошибок или поведение, которые вы видите, вы не ожидаете?