我有一个位于catalog / templatetags / catalog_tags.py中的模板标记,如下所示:
register = template.Library()
@register.inclusion_tag("tags/navigation.html")
def nav_links():
flatpage_list = FlatPage.objects.all()
return {'flatpage_list': flatpage_list }
我有一个带有{% load catalog_tags %}
的catalog.html,用于加载该标记,后面是我导航的包含标记,{% include "tags/navigation.html" %}
。
navigation.html包含以下内容:
{% with flatpage_list as pages %}
{% for page in pages %}
<a href="{{ page.url }}">{{ page.title }}</a>
{% endfor %}
{% endwith %}
但是我的导航部分中没有出现flat_pages列表。那是为什么?
答案 0 :(得分:2)
如果我理解正确,那么在catalog.html
模板中,您可以使用当前状态:
{% load catalog_tags %}
.....
{% include "tags/navigation.html" %}
此代码所做的只是呈现“tags / navigation.html”模板,仅此而已。所以你的自定义模板标签根本没有被击中。要解决此问题,您应该将include
替换为nav_links
:
{% load catalog_tags %}
.....
{% nav_links %}
请参阅Django docs以供参考。
答案 1 :(得分:0)
不确定是否只是复制粘贴错误,但return {'flatpage_list': flatpage_list
未正确关闭return {'flatpage_list': flatpage_list}
这也可能更适合context processor吗?
编辑:在阅读完其他答案后,我意识到你要做的是什么,当你使用{% include ... %}
标签时,你似乎只想填充flatpage_list