【问题标题】:Wagtail / Django inbuilt main menuWagtail / Django 内置主菜单
【发布时间】:2017-05-03 19:56:42
【问题描述】:

开始了一个与 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(活动项目)

然后,我在上述列表中已加星标的页面 (*) 的宣传选项卡中勾选了“在菜单中显示:”。

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

理想情况下,编辑不应该为主页、新闻、关于我们和事件创建同级。如果编辑不是超级用户,是否也可以限制编辑可以添加页面的地方的 wagtails 功能?

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

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

【问题讨论】:

    标签: django menu content-management-system wagtail


    【解决方案1】:

    我也想有自动生成的菜单,但只是一级一级。我可能做了一些幼稚的事情,但它确实有效。我正在使用 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 %}
    

    这是结果:

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

    编辑: 我的最后一个答案没有解决菜单项的自定义顺序。我们可以按页面模型“first_published_at”中的标准字段或按“标题”名称的字母顺序对项目进行排序。但我需要定制。所以我在每个页面模型中添加了自定义整数字段。然后 wagtail 用户可以使用“promote tab”更改菜单项的顺序。

    我当前的页面结构是这样的:

                                 Home
                    /              |           \
             Case studies      Services      Contact
    

    我的页面模型:(仅服务示例)

    class ServicesPage(Page):
    
        template = "home/services.html"
        max_count = 1     
        subpage_types = []
        menu_order = models.IntegerField(default = 0, help_text = "Setup custom menu order")
    
        promote_panels = Page.promote_panels + [
           FieldPanel('menu_order'),
       ]
        class Meta:
            verbose_name = "Services"
            verbose_name_plural = "Services"
    

    这是它在每个页面模型的提升标签中的外观

    最后一步是在基本模板中编辑导航栏循环:

    {% with root_p=request.site.root_page %}
          {% for nav in root_p.get_children.specific.live|dictsort:"menu_order" %}
          {% if nav.show_in_menus %}
          <li class="nav-item {% if nav.slug in request.path %} active {% endif %}">
              <a class="nav-link" href="{{nav.url}}">{{nav.title}}</a>
          </li>
          {% endif %}
          {% endfor %}
    {% endwith %}
    

    为了订购,我使用默认的 django 模板过滤器dictsort。 我想这不是最好的方法,但它确实有效。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 会看进去的。但是我需要澄清一下 wagtail 是否没有内置工具来执行此操作?
      猜你喜欢
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 1970-01-01
      • 2022-11-27
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      相关资源
      最近更新 更多