0

我已将自定义 403、404 和 500 页面设置为平面页面。显然,我不希望这些出现在我的导航菜单中。不幸的是,我似乎无法摆脱它们。

我想要类似的东西:

{% 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 %}

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

{% if '/page/' in page.url %}

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

有什么建议么?

4

1 回答 1

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',))你的视图中。

于 2013-06-20T02:03:11.397 回答