我将自定义的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 collectstatic
和sudo pkill python
之后),所有的平面页仍然存在。我错过了什么吗?我不想做像
{% if '/page/' in page.url %}
对于我的每一个平面页面,因为这似乎与DRY不一致(除此之外还会很痛苦。)
有什么建议吗?
答案 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',))
。