1

我已经用几个模板构建了网站,但我想实现如何从 base.html 中的 DB 读取菜单,这将在整个网站上可见,我不想将它添加到每个模板中。我在 POLL 示例的文档中找到:

https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#inclusion-tags

错误截图

TemplateSyntaxError at / Invalid block tag: 'show_menu'

模板语法错误

Base.html 错误

在我做的应用程序下:templatetags/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>

索引.html

{% extends "base.html" %}

{% block content %}
Hello World! (Content)
{% endblock %}

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

4

1 回答 1

3

您似乎并没有真正阅读您链接到的文档页面。首先,它给出了关于将模板标记代码放在何处的明确说明:不是在 view.py 中,而是在templatetags应用程序内目录内的新文件中。

其次,该页面还解释了您需要在使用它们的每个模板中加载您使用的每个标签库:因此假设您已将标签放入 templatetags/menu.py,您可以这样做{% load menu %}

于 2013-03-31T19:45:25.983 回答