0

我有一个位于 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 }

我有一个 catalog.html,它有{% load catalog_tags %}, 来加载那个标签,后面跟着一个包含标签用于我的导航,{% 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 列表没有出现在我的导航部分中。这是为什么?

4

2 回答 2

2

如果我理解正确,根据您当前的状态,您在catalog.html模板中有类似的内容:

{% load catalog_tags %}
 .....
{%  include "tags/navigation.html" %}

这段代码所做的只是呈现“tags/navigation.html”模板,仅此而已。因此,您的自定义模板标签根本不会被击中。要修复它,您应该替换includenav_links

{% load catalog_tags %}
 .....
{% nav_links %}

请参阅Django 文档以供参考。

于 2013-04-16T20:12:40.003 回答
0

不确定这是否只是复制粘贴错误但未return {'flatpage_list': flatpage_list正确关闭return {'flatpage_list': flatpage_list}

这也可能更适合上下文处理器吗?


编辑:阅读其他答案后,我意识到您正在尝试做什么,当您使用{% include ... %}标签时,您似乎只想填充flatpage_list

于 2013-04-16T20:17:41.193 回答