Назначение и использование тегов шаблона Wagtail/Django вида {% block body_class %}template-homepage{% endblock %}

В документации по трясогузке (Ваш первый сайт о трясогузке) нам говорят создать шаблон 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» в приведенном выше коде)?

Блок определен в вашем шаблоне base.html. Когда вы расширяете шаблон, вы можете определить пользовательский код внутри блоков, которые вы определяете в своем расширенном шаблоне. Например, если в базе есть {% block body_class %}, вы определяете тот же блок в своем дополнительном шаблоне после расширения базы, и вы можете добавить туда любой код, который хотите... Это вопрос Django, а не конкретно вопрос о трясогузке... В вашем примере body_class код (в теге) становится просто template-homepage, когда страница отображается для зрителя, этот код блока заменяется тем, что видит зритель

ViaTech 25.12.2020 20:43

@ViaTech — у меня есть общее представление о том, как работают теги шаблонов Django, но я спрашиваю об этой конкретной форме в демонстрации «Трясогузка». «block body_class» используется во всех трех простых шаблонах, которые должен построить новичок в трясогузке, поэтому я думаю, что это может иметь особое значение. Я думаю, что если это обычный тег Django, то почему они так заметно выделяют его в учебнике, но если это особая штука с трясогузками, почему бы им не продемонстрировать его или хотя бы не рассказать мне, для чего он нужен? (На самом деле, поскольку знание Django не предполагается, документы должны объяснить это в любом случае.)

Joan Eliot 25.12.2020 20:47

Похоже, что трясогузка (хотя у меня нет прямого опыта работы с ней) добавляет базовые теги в шаблон, тогда в этом не должно быть особого значения, потому что он основан на джанго, идеи те же. Все, что делает система шаблонов, — это рендеринг HTML для конечного пользователя на основе определенных блоков, которые вы / или в этом случае объявляет трясогузка.

ViaTech 25.12.2020 20:52
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
775
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В 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. Имею ли я это право?

Joan Eliot 27.12.2020 17:18

Если я вас правильно понял, то да, именно так они назвали его и использовали для примеров, но на самом деле он может быть назван или содержать что угодно, он просто назван там как body_class, потому что он входит в атрибут class тега <body>. Кроме того, если вы просмотрите исходный код своего сайта трясогузки, вы увидите, что он отображается на веб-странице. И хотя вы можете использовать его для выбора CSS, как и тема моего ответа, в учебниках я думаю, что это не только для того, чтобы показать пример его использования, но в основном для того, чтобы вы могли следить за тем, какой шаблон они показывают без явного указания упоминается каждый раз.

Freemium 27.12.2020 19:35

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

Joan Eliot 04.01.2021 18:25

Просто чтобы прояснить правильные ответы выше с помощью изображения, поскольку мне также было интересно, что делает этот тег блока, вот отрендеренный 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 и получить за это вознаграждение. Спасибо, что указали, что он делает.

Just_Stacking 01.03.2023 02:16

Другие вопросы по теме