1

我已经建立了几个模板的网站,但我想实现如何从base.html中的数据库读取菜单,整个网站,我不想将它添加到每个模板。我在docs发现POLL例如:在全局视图(base.html)中的Django动态菜单在所有模板中都可见

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

截图错误

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

Template Syntax Error

Base.html Error

在应用程序下,我做了: 个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 %} 

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

回答

3

您似乎没有真正阅读过您链接到的文档页面。首先,它提供了关于在哪里放置模板标记代码的明确说明:不在view.py中,而是在应用程序内的templatetags目录内的新文件中。其次,该页面还解释了您需要在每个使用它们的模板中加载使用的每个标签库:因此,假设您已将标签放入templatetags/menu.py中,您将执行{% load menu %}

+0

我编辑了代码,如上所述,我在应用程序下创建了文件夹TEMPLATETAGS,并将MENU.PY文件与代码一起。然后我做了模板:{%load menu%},现在我得到了这个错误:菜单'不是一个有效的标签库:找不到模板库菜单,试过django.templatetags.menu,django.contrib.staticfiles.templatetags。菜单,django_admin_bootstrapped.templatetags.menu,django.contrib.admin.templatetags.menu,http://cl.ly/image/3J0t3N061e12 – Radek

+0

我发现这个问题,在templatetags目录下添加“__init__.py”。现在我遇到的问题是,“全局名称”菜单'未定义“,如果我从模型导入菜单中添加了来自django.db导入模型 ,它将引发错误:”'菜单'不是有效的标记库: ImportError引发加载ng.templatetags.menu:没有模块命名模型“ – Radek

+1

为什么要从'django.db'导入模型?无论它在哪里,它们都在您的应用中。 '从myapp.models导入Menu'。 –

相关问题