Django multiple template inheritance - это правильный стиль?
Yo
поэтому у меня есть base.html:
<html>
<body>
<div id="header"> ... </div>
{% block main %}{% endblock %}
<div id="footer"> ... </div>
</body>
</html>
и у меня также есть страница с сообщениями о пользователях:
{% extends base.html %|
{% block main%}
<h1>welcome to yours posts hangout!</h1>
... snazzy code here that shows all the posts ...
{% endblock%}
Теперь проблема в том, что, возможно, у меня есть другая страница:
{% extends base.html %|
{% block main%}
<h1>look at all posts by all users!</h1>
... snazzy code here that shows all the posts by all the users ...
{% endblock%}
потому что все мы принадлежим к mensa, мы можем видеть, что у меня дразнящий код повторяется - дважды (для тавтологической забавы!)
Я не хочу повторять этот код - я имею в виду, если это будет серьезная проблема, но, в противном случае, мне бы хотелось, чтобы одна страница имела узкий код, а затем проскальзывала небольшие изменения выше и (возможно) ниже этого.
Мое понимание шаблонов все же шаткое - я думаю, что это способ сделать это, есть ли лучший/стандартизованный способ?
snazzy.html:
{% extends base.html %|
{% block aboveSnazzy%}
{% endblock %}
... snazzy code here that shows all the posts by all the users ...
{% block belowSnazzy%}
{% endblock %}
{% endblock%}
а затем для каждой из разных частей, я могу иметь:
usersArea.html:
{% extends snazzy.html %|
{% block aboveSnazzy%}
<h1>welcome to yours posts hangout!</h1>
{% endblock %}
{% block belowSnazzy%}
<h1>i didn't think this far ahead in the example</h1>
{% endblock %}
{% endblock%}
и т.д. для других частей тоже!
ok, поэтому я знаю, что могу просто отправить параметр с другим заголовком или что у вас есть - пусть притворяется, что вышеупомянутый материал Snazzy, я не знаю, показывая какой-то другой шаблон, который я хотел бы или что-то делать, -тривиален. Это то, что я подробно описал над "способом" для этого?
ура!
Ответы
Ответ 1
Yo.: -)
Ответ зависит от того, насколько ваши шаблоны имеют общий характер.
-
Если ваши шаблоны имеют много общего, например, они являются страницами какого-либо раздела вашего сайта или просто имеют очень распространенную структуру, то, как вы описали, является лучшим. Сделайте еще один базовый шаблон, добавьте больше блоков и наследуйте его форму. Я просто думаю, что вы должны использовать несколько описательных имен для блока, например
{% extends base.html %|
{% block page_heading %}{% endblock %}
... snazzy code here that shows all the posts by all the users ...
{% block extra_content %}{% endblock %}
-
если ваши шаблоны не имеют общего месива, но разделяют определенный блок контента, это другая ситуация. Здесь сложно создать правильную структуру наследования. Таким образом, вы можете использовать {% include%} здесь: Например, создайте еще один шаблон, в котором отображаются сообщения (дразнящий код, который показывает все сообщения), например _list_posts.html
.
Вы можете создать еще один шаблон, в котором отображаются сообщения (классный код, который показывает все сообщения), например _list_posts.html
. Затем используйте его в шаблонах для детей.
{% extends base.html %|
{% block main%}
<h1>welcome to yours posts hangout!</h1>
{% include '_list_posts.html' %}
{% endblock%}
Вы также можете использовать тег включения.
Какой способ выбрать? Попробуйте ответить на вопрос: может (и должен) эти два шаблона иметь общего предка? Если да, перейдите для первого варианта, если нет - для второго.