Шаблон Django (Wagtail) не распознает тип страницы для условия if
На моем блоге wagtail у меня есть простая модель, которая будет индексной страницей, перечисляющей различные статьи, определенная в моем models.py следующим образом:
class ArticleIndex(Page):
description = models.CharField(max_length=255, blank=True,)
content_panels = Page.content_panels + [FieldPanel("description", classname="full")]
У меня есть некоторые шаблонные теги, настроенные для отображения категорий и тегов в боковой панели, которые должны активироваться только на индексной странице, а не на реальных страницах статей. У меня это настроено следующим образом:
{% if article_index %}
{% categories_list %}
{% tags_list %}
{% endif %}
Если я убираю условие if, все отображается так, как я хочу, поэтому я знаю, что это не проблема с тегами шаблона.
Я не понимаю, почему {% if article_index %} не работает, ведь это тип страницы.
Как я могу вывести фактический тип страницы, чтобы увидеть, где есть расхождение, или понять, почему условие if не выполняется?
{% if article_index %} означает "если переменная article_index определена и имеет истинное значение". Поскольку вы не определили переменную с именем article_index - и в Wagtail нет ничего, что заставило бы переменную с таким именем появиться только потому, что тип страницы - ArticleIndex - это всегда будет false.
С другой стороны, переменная page всегда доступна, поэтому альтернативным способом достижения этой цели было бы:
{% if page.content_type.model == 'articleindex' %}
Однако, поскольку каждый тип страницы имеет свой собственный шаблон, обычно нет необходимости делать такую проверку на основе типа страницы. Обычным способом отображения различных вещей в боковой панели является использование наследования шаблона - например, если ваш шаблон base.html имеет вид:
<html>
<head>...</head>
<body>
<div id="sidebar">
{% block sidebar %}
{% endblock %}
</div>
<div id="content">
{% block content %}
{% endblock %}
</div>
</body>
</html>
тогда вы можете установить содержимое боковой панели только для индексной страницы статьи, определив {% block sidebar %} в article_index.html:
{% extends "base.html" %}
{% block sidebar %}
{% categories_list %}
{% tags_list %}
{% endblock %}
{% block content %}
main page content goes here
{% endblock %}