Я решил эту проблему, создав тег-шаблон в django, который обслуживает все страницы cms:
Приложение / template_tags / navigation_tags.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 будет иметь доступ ко всему, что ему было передано в функции пользовательского тега:
шаблоны / основной navigation.html:
<ul id="navigation">
{% for page in cms_pages %}
{{ page.get_title }}
{% endfor %}
</ul>
Надеюсь, это поможет кому-то лучше понять теги-шаблоны. Я нашел документацию немного запутанной по этому вопросу.