全局视图 (base.html) 中的 Django 动态菜单在所有模板中可见
Posted
技术标签:
【中文标题】全局视图 (base.html) 中的 Django 动态菜单在所有模板中可见【英文标题】:Django dynamic menu in global view (base.html) to be visible in all templates 【发布时间】:2013-03-21 22:46:17 【问题描述】:我已经用几个模板构建了网站,但我想实现如何从 base.html 中的 DB 读取菜单,这将在整个网站上可见,我不想将它添加到每个模板中。我在文档中通过 POLL 示例找到:
https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#inclusion-tags
错误截图
TemplateSyntaxError 在 / 无效的块标签:'show_menu'
在应用程序下我做了: 模板标签/menu.py
from django import template
register = template.Library()
@register.inclusion_tag('menu.html')
def show_menu(menu):
menu = Menu.objects.all()
return 'menu': menu
base.html
% load menu %
<!DOCTYPE html>
<html lang="en">
<head></head>
<body>
% show_menu menu %
% block content %% endblock %
</body>
</html>
index.html
% extends "base.html" %
% block content %
Hello World! (Content)
% endblock %
请帮忙,我做错了什么? 谢谢
【问题讨论】:
【参考方案1】:您似乎并没有真正阅读您链接到的文档页面。首先,它给出了关于将模板标记代码放在何处的明确说明:不是在 view.py 中,而是在应用程序内 templatetags
目录内的新文件中。
其次,该页面还解释了您需要在使用它们的每个模板中加载您使用的每个标签库:因此假设您已将标签放入 templatetags/menu.py,您将执行% load menu %
。
【讨论】:
我编辑了代码,如上所述,我在 app 下创建了文件夹 TEMPLATETAGS 并将 MENU.PY 文件与代码一起放入。然后我在模板中做了:% load menu %,现在我得到了这个错误:menu' is not a valid tag library: Template library menu not found,尝试django.templatetags.menu,django.contrib.staticfiles.templatetags。菜单,django_admin_bootstrapped.templatetags.menu,django.contrib.admin.templatetags.menu,cl.ly/image/3J0t3N061e12 我通过在templatetags目录下添加“init.py”发现了问题。现在我遇到了“未定义全局名称'菜单'”的问题,如果我从模型导入菜单添加 from django.db 导入模型,它将抛出错误:“'菜单'不是有效的标签库:ImportError引发加载 ng.templatetags.menu:没有名为模型的模块“ 为什么要从django.db
导入模型?它们在您的应用程序中,无论在哪里。 from myapp.models import Menu
.以上是关于全局视图 (base.html) 中的 Django 动态菜单在所有模板中可见的主要内容,如果未能解决你的问题,请参考以下文章