#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 %}
В остальном все выглядит так, как должно работать. Какие коды ошибок или поведение, которые вы видите, вы не ожидаете?