【问题标题】:Django dynamic menu in global view (base.html) to be visible in all templates全局视图 (base.html) 中的 Django 动态菜单在所有模板中可见
【发布时间】: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 %}

请帮忙,我做错了什么? 谢谢

【问题讨论】:

    标签: django django-templates django-views global-variables inclusion


    【解决方案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.
    猜你喜欢
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2015-06-25
    • 1970-01-01
    • 2012-05-09
    相关资源
    最近更新 更多