全局视图中的Django动态菜单(base.html)在所有模板中都可见

时间:2013-03-31 19:35:45

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

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

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

错误的屏幕截图

/的TemplateSyntaxError 无效的块标记:'show_menu'

Template Syntax Error

Base.html Error

在app下我做了: 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>

的index.html

{% extends "base.html" %}

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

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

1 个答案:

答案 0 :(得分:3)

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

其次,该页面还说明您需要加载每个使用它们的模板中使用的标记库:所以假设您已将标记放入templatetags / menu.py,那么您将{% load menu %}