我正在尝试创建包含标记,以便我可以在每个页面的导航栏中显示数据。该标记将包含在“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代码不正确,因为include_tag未加载{%include%},而是使用{% load %}
。
更正了base.html
{% load tags %}
{% show_hoods hoodlist %}
感谢您的反馈!
答案 0 :(得分:1)
直接查看menu.html模板不会显示任何内容,因为它没有设置上下文变量。 gethoods
将为空,因此模板中的for循环无需循环。
include标记的主要用途之一是设置额外的上下文变量,然后使用这些变量呈现模板。直接查看模板将显示没有变量的模板,但包括包含模板(在您的情况下为{$ show_hood %}
)将添加上下文变量(gethoods
)并使用它们呈现模板。
回答第二个问题,您可以使用名称(默认情况下的函数名称)而不是{% include %}
标记添加包含模板。 {% include %}
标签适用于您只想在另一个模板内部渲染一个模板,以及它不需要任何上下文变量或使用其父模板可用的上下文变量的情况。