Skip to main content
 首页 » 编程设计

python之Django 可插拔动态导航应用程序

2025年05月04日30落叶无声

我想将我的大型 Django 应用分离为多个应用。但是有一个问题:导航。每个应用程序都应该能够添加自己的菜单项,让其他应用程序的导航可见。

我认为使用 block 扩展的简单模板是不可能的。一个可能的解决方案是一个单独的导航应用程序,每个其他应用程序都可以注册其菜单项。 我不想通过管理界面手动创建菜单项。我想要这样的东西:

# in users app: 
import navapp 
navapp.register(view_name='users_summary', path=('Home', 'Users')) 
navapp.register(view_name='user_search', path=('Search', 'User')) 
... 
 
# in another app: 
import navapp 
navapp.register(view_name='other_stuff', path=('Home', 'Other stuff')) 
navapp.register(view_name='about', path=('About',) 
... 

在 base.html 中:从 navapp 导入一个 templatetag 并以某种方式使用它来呈现菜单。

当然,我的例子是简化的(例如,我故意省略了菜单项的排序,尽管这很重要),但我希望它能传达这个想法。

是否已经有用于此目的的可重复使用的应用程序?如果不是,实现它的最佳方法是什么?


我发现了一个类似的问题:http://answers.splunk.com/answers/125820/single-navigation-for-multiple-apps

我想要的类似于django cms menu integration但我不想弄乱 django-cms。我需要一个小应用程序。

请您参考如下方法:

我的解决方案是添加一个 installed_apps context_preprocessor:

from django.conf import settings 
 
def installed_apps(request): 
    return {'INSTALLED_APPS': settings.INSTALLED_APPS} 
 
 
TEMPLATE_CONTEXT_PROCESSORS = ( 
    ... 
    "baseapp.context_processors.installed_apps", 
    ... 
) 

然后在模板中,如果应用程序处于 INSTALLED_APPS 中,我可以添加一个导航元素

{% if 'app' in INSTALLED_APPS %} 
  <li><a href="/app">APP</a></li> 
{% endif %}