您是否有任何理由不能将模板过滤器与Django模板语法中的字符串进行比较?

时间:2009-02-07 19:20:37

标签: django

我正在尝试这样做,并且失败了。有没有理由说它不能用于Django模板语法?我正在使用最新版本的Django。

{% ifequal entry.created_at|timesince "0 minutes" %}

5 个答案:

答案 0 :(得分:5)

它不起作用,因为它不应该工作。您要求的不是模板语言的一部分。

您无法在{% ifequal等代码中间应用过滤器。当模板标签使用变量时,它不期望一个表达式,它只需要一个变量。

这种逻辑 - 提取时间,比较等等 - 是您在视图函数中应该做的事情。

然后,您的视图函数会在上下文中放置“zerominutes”项以供模板使用。模板无法进行太多处理。

它们旨在实现呈现HTML所需的最低要求。其他一切都需要在你的视图功能中。

答案 1 :(得分:5)

{% ifequal %}标记不支持将过滤器表达式作为参数。它将整个entry.created_at|timesince视为变量的标识符。

Quik解决方法:使用{% with %}引入具有expresion结果的中间变量,如下所示:

{% with entry.created_at|timesince as delta %}
    {% ifequal delta "0 minutes" %}
    ....
    {% endifequal %}
{% endwith %}

答案 2 :(得分:2)

有关详情,请参阅ticket #5756及其评论中的链接。 ticket #7295中的Django补丁实现了此功能。在#7295中提出了基于ticket #7806的模板系统的更广泛的重构,它将解决这个问题。

我不认为对这些比较进行工作会违反Django模板的设计理念。

答案 3 :(得分:0)

我认为你可以,但我没有看到它的任何用途我的代码库。也许entry.created_at|timesince没有产生你期望的价值。试试

X{{entry.created_at|timesince}}X 

进入模板并查看其产生的价值。 X是如此,你可以看到前导空格或尾随空格,以防出现问题。

答案 4 :(得分:0)

我最终放弃了将Django模板语言用于除最简单页面之外的任何其他内容。查看Jinja2以获得几乎与语法兼容的替代方案。是的,您可以选择逐页使用。