Wagtail / Django内置主菜单

时间:2017-05-03 19:56:43

标签: django menu content-management-system wagtail

开始了一个与Wagtail CMS合作的项目,我对他们的页面原理的理解是它是层次结构的,这使我得出结论页面是父/子相关或兄弟姐妹。

所以我如何做到这一点是我的主页登陆,所有其他页面都是这个页面的孩子。

这是我的结构

                                   Home page
                        /             |                     \
                    News            About us               Events
                  /  |   \                             /     |     \
          n_item   n_item  n_item               e_item   e_item   e_item

所以他们是6种类型的页面

  1. 首页*(独特)
  2. 新闻*(独特)
  3. n_item(新闻项目)
  4. 关于我们*(独特)
  5. 活动*(独特)
  6. e_item(事件项目)
  7. 然后,我在上面列表中的星号页面(*)的提升标签中勾选了“在菜单中显示:”。

    n_item和e_item将允许编辑(非技术)人员根据需要添加这些页面,因为它们将分别作为“新闻”和“事件”页面中内容的一部分列出。

    理想情况下,编辑不应该为主页,新闻,关于我们和活动创建兄弟姐妹。如果编辑者不是超级用户,是否也可以限制编辑者可以添加页面的功能?

    但似乎没有一种明确的简单方法(可能是标签)来生成我的菜单。这就是我在研究中发现的。

    1. page url and slug url我似乎无法在每个未被该页面模板直接引用的模板中工作。这也意味着它不那么动态
    2. django-simple-menu对我来说似乎没有动态,因为我必须在代码中手动链接页面。另外,如果这是wagtail打算这样做的方式,那么在内部维护页面层次结构似乎是浪费。
    3. List item似乎已被弃用,但即使它不是因为与1和2相同的原因看起来很麻烦

2 个答案:

答案 0 :(得分:1)

你见过https://github.com/rkhleics/wagtailmenus吗?它的设计旨在以一致,灵活的方式管理和呈现多级导航和简单的平面菜单。"

答案 1 :(得分:0)

我也想自动生成菜单,但是只有首页才能生成。我可能做过一些幼稚的事情,但是它可以工作。我正在使用 Wagtail 2.5.1和Django 2.2.2

我的Wagtail页面结构如下:

                                 Home page
                    /                                   \
                Blog                                   About
              /  |   \                            
      n_item   n_item  n_item 

我正在使用bootstrap4,所以这是我在base.html模板中的导航:

{% with root_p=request.site.root_page %}

        {# this is static item for home #}
        <ul class="navbar-nav ml-auto">
          <li class="nav-item">
                <a class="nav-link {% if '/' == request.path %} active {% endif %}" href="{{root_p.url}}">{{root_p.slug}}</a>
          </li>

        {# Here I am looping home's childrens #}
          {% for nav in root_p.get_children.live %}
              {% if nav.show_in_menus %}
                  <li class="nav-item">
                      <a class="nav-link {% if nav.slug in request.path %} active {% endif %}" href="{{nav.url}}">{{nav.slug}}</a>
                  </li>
              {% endif %}
          {% endfor %}
        </ul>

{% endwith %}

这是结果: wagtail automatically generated menu

现在,我可以更改弹头,勾选/取消选中“在菜单中显示”,并且我的引导菜单会反映这些更改。