为什么这个django模板标签无法显示?

时间:2013-04-16 20:04:22

标签: django django-templates

我有一个位于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列表。那是为什么?

2 个答案:

答案 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