В моем блоге о трясогузках у меня есть простая модель, которая будет индексной страницей со списком различных статей, определенных в моем 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
, а в Трясогузке нет ничего, что заставляло бы переменную с таким именем появляться только потому, что тип страницы — ArticleIndex, она всегда будет ложной.
С другой стороны, переменная 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 %}
Большое спасибо, это отличное объяснение, которое действительно помогло мне понять! Я следил за учебным пособием по AccordBox, в котором использовался
{% if blog_page %}
, который работал в примере, и я не мог понять, почему не удалось изменить его, чтобы он соответствовал моим моделям. Основываясь на вашем ответе, я предполагаю, что где-то была установлена переменная. Я собираюсь адаптировать свой base.html так, как вы предлагаете, так как в любом случае это имеет больше смысла для меня. Спасибо!