夹层的菜单页面

Menu pages in Mezzanine

在 Mezzanine / Django 中,我有几个嵌套页面,但只有嵌套最深的页面有内容。对于每个中间页面,我只想显示其直接子项的菜单。例如,给定布局:

Chapter 1
    Section 1.1
        Subsection 1.1.1
        Subsection 1.1.2
    Section 1.2
        Subsection 1.2.1
Chapter 2
    Section 2.1
        Subsection 2.1.1

被标记为 chapter-1 的页面应该只显示

的列表
* Section 1.1
* Section 1.2

我可以通过为包含以下内容的每个章节创建自定义模板来做到这一点:

{% load pages_tags %}
{% page_menu "pages/menus/chapter_menu.html" %}

其中 chapter_menu.html 是我的菜单模板:

{% load pages_tags %}
<ul>
{% for page in page_branch %}
{% if page.in_menu %}
{% if page.is_current_child %}
<li>
    <a href="{{ page.get_absolute_url }}">{{ page.title }}</a>
</li>
{% else %}
{% page_menu page %}
{% endif %}
{% endif %}
{% endfor %}
</ul>

但是,每个模板名称(例如 pages/chapter-1.html)必须与其引用的页面的别名相匹配,因此我需要为每一章和每一节复制这些模板。

没有所有模板重复的正确方法是什么?

我认为您不需要为每个菜单创建模板。我通过使用 enter link description here

中的 tree.html 和 my_menu.html 解决了这个问题

所以我只是将 menus/tree.html 替换为:

{% load i18n future pages_tags %}
{% spaceless %}
{% page_menu "pages/menus/my_menu.html" %}
{% endspaceless %}

并添加了 menus/my_menu.html:

{% load pages_tags %}
{% for page in page_branch %}
    {% if page.is_current_child %}
    <a href="{{ page.get_absolute_url }}">{{ page.title }}</a>
    {% endif %}
    {% if page.is_current_or_ascendant %}
        {% if page.has_children_in_menu %}{% page_menu page %}{% endif %}
    {% endif %}
{% endfor %}