【发布时间】:2014-05-16 03:22:16
【问题描述】:
我正在尝试创建包含标签,以便可以在每个页面的导航栏中显示数据。该标签将包含在“base.html”中,因此它应该显示在任何地方。
tags.py
@register.inclusion_tag('menu.html')
def show_hoods(HoodList):
gethoods = Hood.objects.all()
return {'gethoods': gethoods}
menu.html
{% for hood in gethoods %}
<h3>{{ hood.name }}</h3>
{% endfor %}
由于某种原因,menu.html 模板是空白的并且没有显示任何数据。
另外,一旦我运行了 menu.html,简单的 {% include 'menu.html' %} 会在 base.html 中工作吗?那会自动渲染吗?
编辑:
根据下面的反馈,上面的代码是正确的,但是 base.html 代码不正确,因为 contains_tag 没有加载 {% include %} 而是使用了{% load %}。
更正了 base.html
{% load tags %}
{% show_hoods hoodlist %}
感谢您的反馈!
【问题讨论】:
-
如何在 base.html 中添加包含标签?另外,HoodList 是什么?
-
HoodList 只是请求的名称,我应该将其重命名为“请求”吗?根据 base.html,我计划使用 {% include %} 标签。
-
您使用它们的名称添加包含标签。因此,在 base.html 中添加 {% show_hoods %} 应该会呈现带有 Hood 对象列表的 menu.html。直接查看 menu.html 会将其显示为空,因为 menu.html 需要您在 show_hoods 中传递给它的上下文变量(gethoods)。
-
只需在 base.html 中执行 {% include menu.html %} 即可包含 menu.html 而无需将 gethoods 上下文变量传递给它。除非渲染 base.html 的视图可以使用 gethoods 上下文变量,否则它也将为空。这就是包含标签的用途 - 设置一些额外的上下文变量并使用这些上下文变量呈现模板。
-
或者,您可以将问题编辑回最初的样子,然后发布您的修复作为答案。这样一来,遇到类似问题的人就可以更轻松地了解解决方案是什么。