在模板中过滤掉东西

时间:2013-06-20 01:37:58

标签: django django-templates django-flatpages

我将自定义的403,404和500页设置为flatpages。显然,我不希望这些出现在我的导航菜单中。不幸的是,我似乎没有做任何事情可以摆脱它们。

我想要类似的东西:

{% for page in flatpages %}
    {% if page.url != "/403/" and page.url != "/404/" and page.url != "/500/" %}
        <li><a href="{{ page.url }}">{{ page.title }}</a></li>
    {% endif %}
{% endfor %}

......但这似乎不起作用。事实上,似乎没有任何作用。我试过了

{% if "error" not in page.url %}

(这理论上会清空我的菜单栏,因为我没有设置任何平面网址以包含'错误'),但这也不起作用。每次重新加载页面时(即使在运行manage.py collectstaticsudo pkill python之后),所有的平面页仍然存在。我错过了什么吗?我不想做像

这样的事情
{% if '/page/' in page.url %}

对于我的每一个平面页面,因为这似乎与DRY不一致(除此之外还会很痛苦。)

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您为什么决定在这些网页上使用平面网页?

您可以在ModelManager类中为模型FlatPage指定一个方法,如下所示:

def without_error_pages(self):
    return self.exclude(url__in=('/403/', '/404/', '405',))

然后您可以在模板中使用它:

{% for page in flatpages.without_error_pages %}
    <li><a href="{{ page.url }}">{{ page.title }}</a></li>
{% endfor %}

或者您可以在视图中添加self.exclude(url__in=('/403/', '/404/', '405',))