В документации по трясогузке (Ваш первый сайт о трясогузке) нам говорят создать шаблон homepage.html следующим образом:
{% extends "base.html" %}
{% load wagtailcore_tags %}
{% block body_class %}template-homepage{% endblock %}
{% block content %}
{{ page.body|richtext }}
{% endblock %}
В приведенном выше коде, что должен делать этот тег {% block body_class %}template-homepage{% endblock %}
? Я не могу найти упоминания об этом в тексте учебника.
Далее в руководстве предлагается создать еще два шаблона, шаблоны blog_index_page и blog_page, оба из которых должны содержать теги {% block body_class %}
. Опять же, я не могу найти ни одного упоминания об этих строках в документах, не говоря уже об объяснении того, как их можно использовать/модифицировать.
Поиск «body_class» в документах находит только три только что упомянутых блока кода и еще одно упоминание: в примечаниях к выпуску версии 1.2 в разделе «Что нового — второстепенные функции» примечание: «Упрощенный body_class
в шаблоне домашней страницы по умолчанию».
Любое понимание того, что я должен делать с этими тегами? Какое особое значение или функцию, если таковая имеется, имеет текст, заключенный в теги в этих шаблонах учебных пособий (например, «template-homepage» в приведенном выше коде)?
@ViaTech — у меня есть общее представление о том, как работают теги шаблонов Django, но я спрашиваю об этой конкретной форме в демонстрации «Трясогузка». «block body_class» используется во всех трех простых шаблонах, которые должен построить новичок в трясогузке, поэтому я думаю, что это может иметь особое значение. Я думаю, что если это обычный тег Django, то почему они так заметно выделяют его в учебнике, но если это особая штука с трясогузками, почему бы им не продемонстрировать его или хотя бы не рассказать мне, для чего он нужен? (На самом деле, поскольку знание Django не предполагается, документы должны объяснить это в любом случае.)
Похоже, что трясогузка (хотя у меня нет прямого опыта работы с ней) добавляет базовые теги в шаблон, тогда в этом не должно быть особого значения, потому что он основан на джанго, идеи те же. Все, что делает система шаблонов, — это рендеринг HTML для конечного пользователя на основе определенных блоков, которые вы / или в этом случае объявляет трясогузка.
В base.html
у вас есть часть, похожая на <body class = "{% block body_class %}{% endblock %}">
. То, что вы добавите в этот блок в своих шаблонах, будет отображено в этом разделе.
Например, скажем, в вашем дизайне ваш <body>
содержит нижнее поле, однако в конкретном шаблоне вы не хотите, чтобы это поле было там, и создайте класс css .remove-margin { margin-bottom: 0 };
Затем вы можете добавить {% block body_class %}remove-margin{% endblock %}
в свой шаблон, и он применит класс к тегу <body>
без необходимости изменять шаблон base.html
для этого единственного варианта использования.
Вы также можете создавать свои собственные. В base.html
добавьте пользовательский блок, такой как {% block my_custom_block %}{% endblock %}
, а затем в свой шаблон включите некоторый текст или html внутри этого my_custom_block
, и он будет отображаться везде, где вы разместили эту часть в базовом шаблоне.
Ах я вижу. Таким образом, имя «body_class» для этого тега и форма строки содержимого тега являются просто соглашениями: во-первых, суффикс «_class» указывает, что содержимое тега должно относиться к классу CSS. Во-вторых, строка «template-homepage» — это просто заполнитель, который следует заменить фактическим именем класса. Таким образом, содержимое имени тега, оканчивающегося на «_class», должно соответствовать атрибуту/спецификатору класса в теге HTML. Но это соглашение не соблюдается, и если хотите, вы можете использовать тег «_class» для отображаемого контента или тег с любым именем для ссылки на класс CSS. Имею ли я это право?
Если я вас правильно понял, то да, именно так они назвали его и использовали для примеров, но на самом деле он может быть назван или содержать что угодно, он просто назван там как body_class
, потому что он входит в атрибут class
тега <body>
. Кроме того, если вы просмотрите исходный код своего сайта трясогузки, вы увидите, что он отображается на веб-странице. И хотя вы можете использовать его для выбора CSS, как и тема моего ответа, в учебниках я думаю, что это не только для того, чтобы показать пример его использования, но в основном для того, чтобы вы могли следить за тем, какой шаблон они показывают без явного указания упоминается каждый раз.
Я отмечаю вышеизложенное как ответ. Хотя это не полностью развеяло мои сомнения по поводу этой проблемы, оно помогло мне в этом, и теперь я думаю, что мог бы написать правильный ответ (имеется в виду тот, который полностью разрешил бы мое прежнее замешательство за один раз). В данный момент времени на это нет, но я внесу уточнение в документацию по трясогузке.
Просто чтобы прояснить правильные ответы выше с помощью изображения, поскольку мне также было интересно, что делает этот тег блока, вот отрендеренный html. Согласно ответу выше, это стандартный Django.
В base.html у вас есть эта строка:
<body class = "{% block body_class %}{% endblock %}">
Замена происходит в шаблоне home_page.html:
{% block body_class %}template-homepage{% endblock %}
И это отображается в соответствии со скриншотом ниже:
<body class = "template-homepage">
Stackoverflow может стать отличным способом улучшить существующую документацию WagtailCMS и получить за это вознаграждение. Спасибо, что указали, что он делает.
Блок определен в вашем шаблоне
base.html
. Когда вы расширяете шаблон, вы можете определить пользовательский код внутри блоков, которые вы определяете в своем расширенном шаблоне. Например, если в базе есть{% block body_class %}
, вы определяете тот же блок в своем дополнительном шаблоне после расширения базы, и вы можете добавить туда любой код, который хотите... Это вопрос Django, а не конкретно вопрос о трясогузке... В вашем примереbody_class
код (в теге) становится простоtemplate-homepage
, когда страница отображается для зрителя, этот код блока заменяется тем, что видит зритель