Skip to main content
 首页 » 编程设计

python之使用 django 的站点菜单

2025年05月04日26xing901022

我想在我的网站上有一个菜单。 我希望这个菜单可以通过 django admin 进行编辑。所以,我需要为它创建一个模型。

为我的菜单创建模型后,我可以在我的 views.py 中使用它:

def main(request): 
    menu_items = MenuItem.objects.all() 
    return direct_to_template(request, 'main.html', {'menu_items': menu_items}) 

没关系。但是……等一下…… 如果我有多个页面,它看起来像:

def main(request): 
    menu_items = MenuItem.objects.all() 
    return direct_to_template(request, 'main.html', {'menu_items': menu_items}) 
 
def page1(request): 
    menu_items = MenuItem.objects.all() 
    return direct_to_template(request, 'page1.html', {'menu_items': menu_items}) 
 
def page2(request): 
    menu_items = MenuItem.objects.all() 
    return direct_to_template(request, 'page2.html', {'menu_items': menu_items})` 

有什么办法可以避免每次创建新函数时都编写相同的代码吗?

请您参考如下方法:

是的,创建一个 context processor并且您的菜单将在每个页面上可用

在您的某个应用中创建一个文件 menu_context_processor.py(或类似文件)

from myapp.models import MenuItem 
def menu(request): 
    return {'menu': MenuItem.objects.all() } 

并将其添加到 settings.py 中的 TEMPLATE_CONTEXT_PROCESSOR 设置

TEMPLATE_CONTEXT_PROCESSORS = ( 
    ..., 
    'myapp.menu_context_processor.menu' 
) 

现在,在每个模板中,您都可以访问{{ menu }}。这些用于使 {{ STATIC_URL }} 和 `{{ MEDIA_URL }}' 在整个应用程序中对您可用,并且对于您希望包含在任何地方的变量很有用。