我正在使用Django模板语言输出有关最近访问者在页面上的操作的信息 .
目标是创建一个ifequal条件语句来输出一个列表,显示自最后5个操作的操作以来的时间 . 对于显示“0分钟”的任何内容,我们希望显示“不到一分钟前” .
现在,看起来ifequal条件语句对我不起作用 .
我尝试过以下方法:
-
检查{}输出到"0 minutes"或页面上的其他时间
-
使用X {} X输出变量以查看是否有任何空格(没有空格)
-
在变量和输出中添加了"|timesince"过滤器 . 没有区别 .
-
我尝试在{}上使用".strip"方法,这完全破坏了页面 .
感谢您提供的任何帮助或建议!
{% for a in page.recent_actions | slice:":5" %}
{% with j=a.created_at %}
{% ifequal j|timesince "0 minutes" %}
Less than a minute ago
{% else %}
{{ j|timesince }}
{% endifequal %}
{% endwith %}
{% endfor %}
3 回答
似乎在django模板中不推荐使用
{% ifequal a b %}
. {% if a == b %}
的使用是首选 .timesince过滤器需要datetime类型作为输入 . 例如:
{{ created_dttm.strftime("%Y-%m-%d %H:%M:%S") }}
将输出"2015-02-09 11:52:09"{{ created_dttm|timesince }}
将输出"0 minutes"因此,如果
a.created_at
是一个日期时间,因为适合使用时间片过滤器,您最好在条件中比较日期时间而不是比较字符串 . 例如如果
a.created_at
确实是一个字符串,正如你在问题中提到的那样,那么使用timesince过滤器是不合适的 . 我试着看看{% if a.created_at == "0 minutes" %}
.同时将日期时间存储为表示层之外的“5分钟”之类的相对字符串可能不是最好的设计 . 请考虑使用日期时间,并仅在表示层中转换为字符串 .
python日期和时间操作可以是巴洛克式的 . 我们正在使用箭头库来平滑它:http://crsmithdev.com/arrow/
这是因为timesince / timeuntil返回的"0 minutes"在其中有一个不间断的空格,因此它不等于你的文字 . (看看
django.utils.timesince.py
中的实现一种选择是编写一个利用timesince / timeuntil的自定义标记,但在这些函数返回时将字符串与不间断空格进行比较:
感谢@ AJ-Slater的回答,它有助于看到比较日期时间而不是过滤器的输出更好 . 我们尝试使用"sub"数学过滤器,该过滤器不适用于此特定CRM,但ifequal语句的工作原理是
{% ifequal a.created_at|timesince a.created_at|timeuntil %}
.