Django (Wagtail) 模板无法识别 if 条件的页面类型
Django (Wagtail) template not recognizing page type for if condition
在我的 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' %}
但是,由于每种页面类型都有自己专用的模板,因此通常没有必要根据页面类型进行这种检查。在边栏中显示不同内容的正常方法是使用 template inheritance - 例如,如果您的 base.html
模板是:
<html>
<head>...</head>
<body>
<div id="sidebar">
{% block sidebar %}
{% endblock %}
</div>
<div id="content">
{% block content %}
{% endblock %}
</div>
</body>
</html>
然后你可以通过在article_index.html
中定义{% block sidebar %}
来设置文章索引页侧边栏的内容:
{% extends "base.html" %}
{% block sidebar %}
{% categories_list %}
{% tags_list %}
{% endblock %}
{% block content %}
main page content goes here
{% endblock %}
在我的 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' %}
但是,由于每种页面类型都有自己专用的模板,因此通常没有必要根据页面类型进行这种检查。在边栏中显示不同内容的正常方法是使用 template inheritance - 例如,如果您的 base.html
模板是:
<html>
<head>...</head>
<body>
<div id="sidebar">
{% block sidebar %}
{% endblock %}
</div>
<div id="content">
{% block content %}
{% endblock %}
</div>
</body>
</html>
然后你可以通过在article_index.html
中定义{% block sidebar %}
来设置文章索引页侧边栏的内容:
{% extends "base.html" %}
{% block sidebar %}
{% categories_list %}
{% tags_list %}
{% endblock %}
{% block content %}
main page content goes here
{% endblock %}