imk*_*ost 1 python django menu
我想在我的网站上找一个菜单.我希望这个菜单可以通过django admin进行编辑.所以,我需要为它创建一个模型.
一旦我为我的菜单创建了模型,我就可以在我的views.py中使用它:
def main(request):
menu_items = MenuItem.objects.all()
return direct_to_template(request, 'main.html', {'menu_items': menu_items})
Run Code Online (Sandbox Code Playgroud)
没关系.但是......等一下......如果我有几页,它看起来像:
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})`
Run Code Online (Sandbox Code Playgroud)
有没有办法在每次创建新功能时不写相同的代码?
是的,创建一个上下文处理器,您的菜单将在每个页面上可用
在其中一个应用程序中创建一个文件menu_context_processor.py(或类似)
from myapp.models import MenuItem
def menu(request):
return {'menu': MenuItem.objects.all() }
Run Code Online (Sandbox Code Playgroud)
并将其添加到您的TEMPLATE_CONTEXT_PROCESSOR设置中settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
...,
'myapp.menu_context_processor.menu'
)
Run Code Online (Sandbox Code Playgroud)
现在,在每个模板中,您都可以访问{{ menu }}.这些用于{{ STATIC_URL }}在整个应用程序中为您提供`{{MEDIA_URL}}',对于您希望包含在各处的变量非常有用.