我想要一个带有菜单和子菜单的菜单结构,并且取决于 当前正在查看哪个页面,我想突出显示两个菜单中的项目。是 有没有提供此功能的模块或应用程序?如果没有,最好的方法是什么 解决问题?
快速谷歌搜索给出了这个:
https://github.com/jphalip/django-treemenus
http://code.google.com/p/django-menuse/
您也可以手动创建这样简单的菜单,只需传递到活动菜单和活动子菜单项的菜单项模板列表、活动菜单和子菜单项列表即可:
<ul>
{% for item in menu_items %}
<li>
{% if item.id == active_menu_item %}
<span class="active-menu-item">{{ item }}</span>
<ul>
{# Similar code for submenu items #}
</ul>
{% else %}
<a class="inactive-menu-item" href="{{ item.url }}">{{ item }}</a>
{% endif %}
</li>
{% endfor %}
</ul>
根据djangopackages,2018 年最受欢迎的菜单应用程序是
django-sitetree
。
可以使用上面链接中的第二个工具django-activeurl来完成项目突出显示。
但是,对于大型站点,django-sitetree 可能存在性能问题。
还有另一种与菜单层次结构相关的方法:
modified preorder tree traversal
,它优化了树形查找的数据库查询。
使用 django-mptt 存储分层数据(例如具有无限深度的子菜单的菜单)。使用 django-mptt-admin 在管理菜单中轻松管理它们。
contenttypes
框架对于更通用的菜单可能很有用(这在 django-mptt 教程中没有显示)。