我正在尝试这样做,并且失败了。有没有理由说它不能用于Django模板语法?我正在使用最新版本的Django。
{% ifequal entry.created_at|timesince "0 minutes" %}
答案 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以获得几乎与语法兼容的替代方案。是的,您可以选择逐页使用。