【问题标题】:Filtering things out in template for loops在模板中过滤掉循环中的内容
【发布时间】:2013-06-20 01:37:57
【问题描述】:

我已将自定义 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 collectstaticsudo pkill python 之后),所有的平面页面仍然存在。我错过了什么吗?我不想做类似的事情

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

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

有什么建议吗?

【问题讨论】:

    标签: django django-templates django-flatpages


    【解决方案1】:

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

    您可以在 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',)) 放在您的视图中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-03
      • 2017-04-02
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多