Django templates Django模板ifequal变量与timesince过滤器的比较
我使用Django模板语言在页面上输出关于最近访问者行为的信息 目标是创建一个ifequal条件语句,以输出一个列表,显示最近5个操作的自操作以来的时间。对于任何显示“0分钟”的内容,我们希望显示“不到一分钟前” 现在看来ifequal条件语句对我不起作用 我尝试了以下方法:Django templates Django模板ifequal变量与timesince过滤器的比较,django-templates,django-template-filters,Django Templates,Django Template Filters,我使用Django模板语言在页面上输出关于最近访问者行为的信息 目标是创建一个ifequal条件语句,以输出一个列表,显示最近5个操作的自操作以来的时间。对于任何显示“0分钟”的内容,我们希望显示“不到一分钟前” 现在看来ifequal条件语句对我不起作用 我尝试了以下方法: 检查{j}是否输出到页面上的“0分钟”或其他时间量 用X{{j}}X输出变量以查看是否有空白(没有) 在变量和输出中添加了“| timesince”过滤器。没有区别 我尝试在{j.strip}上使用“.strip”方法,
- 检查{j}是否输出到页面上的“0分钟”或其他时间量
- 用X{{j}}X输出变量以查看是否有空白(没有)
- 在变量和输出中添加了“| timesince”过滤器。没有区别
- 我尝试在{j.strip}上使用“.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 %}
{%ifequal a b%}
在django模板中似乎已被弃用。如果a==b%}最好使用{%
timesince筛选器需要datetime类型作为输入。例如:
{{created_dttm.strftime(“%Y-%m-%d%H:%m:%S”)}
将输出“2015-02-09 11:52:09”
{{created|dttm | timesince}}
将输出“0分钟”
因此,如果a.created\u at
是一个日期时间,这对于使用时间片过滤器是合适的,那么您最好在条件中比较该日期时间,而不是比较字符串。e、 g
{% if datetime.datetime.now() - datetime.timedelta(minutes=1) < j %}
Less than a minute ago
{% else %}
{{ j|timesince }}
{% endif %}`
{%if datetime.datetime.now()-datetime.timedelta(分钟=1)
如果a.created\u at
确实是一个字符串,正如您在问题中提到的,那么使用timesince过滤器是不合适的。我将尝试查看{%if a.created_at==“0分钟”%}
另外,在表示层之外将日期时间存储为相对字符串(如“5分钟”)可能不是最好的设计。考虑使用DeaTimes而只在表示层中转换为字符串。
python日期和时间操作可以是巴洛克风格的。我们使用箭头库来解决这个问题:感谢@AJ Slater的回答,它帮助我们看到比较日期时间比比较过滤器的输出更好。我们尝试使用“sub”数学过滤器,该过滤器不适用于这个特定的CRM,但有效的是{%ifequal a.created_at | timesince a.created_at | timeuntil%}
用于ifequal语句。这是因为timesince/timeuntil返回的“0分钟”中有一个不间断的空格,因此它不等于您拥有的文本。(在django.utils.timesince.py
一个选项是编写一个自定义标记,该标记利用timesince/timeuntil,但在这些函数返回时将字符串与非中断空格进行比较:
from django import template
from django.utils.html import avoid_wrapping
from django.utils.translation import ugettext
from django.utils.timesince import timeuntil
register = template.Library()
@register.filter("is_past", is_safe=False)
def is_past(value, arg=None):
"""Returns true if a timestamp is in the past."""
if not value:
return False
try:
return timeuntil(value, arg) == avoid_wrapping(ugettext('0 minutes'))
except (ValueError, TypeError):
return False