bugfix> django > 投稿

Django CMS 3.5.1とDjango 1.11.11のサイトがあり、CMSで作成されたメニューがあります。そのページの1つは、イベントのapphookedリストです。イベントの詳細をクリックすると、メニューのアクティブなクラスが失われます。

ここに私のメニューがあります:

{% for child in children %}
    <li class="js-submenuParent {% if child.selected or child.ancestor %}active{% endif %}">
        <a href="{% if child.children %}javascript:void(0);{% else %}{{ child.attr.redirect_url|default:child.get_absolute_url }}{% endif %}" class="{% if child.children %}submenu-btn js-openSubmenu{% endif %}">{{ child.get_menu_title }}</a>
    {% if child.children %}
        <ul class="submenu js-submenu">
            {% show_menu from_level to_level extra_inactive extra_active template "" "" child %}
        </ul>
    {% endif %}
    </li>
{% endfor %}

child.ancestor と思った問題を解決できます(または child.selected {% page_attribute "page_title" %} を使用して親のタイトルにアクセスできるようです )しかし、そうではありません。作る必要がありますかカスタムapphookメニュー それをするだけですか、より簡単な解決策がありますか?

回答 2 件
  • アプリケーションをアタッチするページは、アプリケーションのメニューを統合するまでメニューシステムが認識する最後のポイントです。

    メニューを追加すると、アプリURLを NavigationNode(title, url, id) 経由でメニューアプリと統合できます  URLのオブジェクト。

    そのため、詳細ビューがある場合は、簡単なメニューを添付できます。

    from menus.base import NavigationNode
    from menus.menu_pool import menu_pool
    from django.utils.translation import ugettext_lazy as _
    from cms.menu_bases import CMSAttachMenu
    class EventMenu(CMSAttachMenu):
        name = _("event menu")
        def get_nodes(self, request):
            nodes = []
            n = NavigationNode(_('detail page'), "/detail", 1)
            nodes.append(n)
            return nodes
    menu_pool.register_menu(EventMenu)
    
    

    これに関するドキュメントはこちらです。 http://docs.django-cms.org/en/latest/how_to/menus.html#integration-attach-menus

    上記に基づいて、少し調べて見つけたように、リスト/クエリセットなどに基づいてノードを生成することもできます。

    def get_nodes(self, request):
        nodes = []
        for event in Event.objects.published():
            n = NavigationNode(
                event.title,  # title
                event.get_absolute_url(),  # url
                'id_{slug}'.format(slug=event.slug),  # unique ID for node
                visible=False
            )
            nodes.append(n)
        return nodes
    
    

  • これは、3.5.xおよび3.4​​.xメニューの機能強化で導入されたリグレッションでした。

    これは修正されており、3.5.3および3.4​​.7でリリースされます

    関連チケット:https://github.com/divio/django-cms/issues/6336

あなたの答え