我最终通过在 django 中创建一个提供所有 cms 页面的模板标签来解决这个问题:
应用程序/模板标签/导航标签.py:
from django import template
from cms.models.pagemodel import Page
register = template.Library()
def cms_navigation():
cms_pages = Page.objects.filter(in_navigation=True, published=True)
return {'cms_pages': cms_pages}
register.inclusion_tag('main-navigation.html')(cms_navigation)
然后在模板中调用模板标签,如下所示:
{% load navigation_tags %} {% cms_navigation %}
这需要您创建一个 main-navigation.html 文件。在这里,来自该模板的 HTML 将被注入到标签所在的模板中,并且 main-navigation.html 将可以访问在自定义标签函数中传递给它的任何内容:
模板/主导航.html:
<ul id="navigation">
{% for page in cms_pages %}
{{ page.get_title }}
{% endfor %}
</ul>
我希望这可以帮助人们更好地理解模板标签。我发现文档在这个主题上有点混乱。