Django模板计算从现在到特定日期的天数

时间:2017-12-03 19:01:45

标签: django django-models django-templates

我有一个使用DateField的模型:

end_date = models.DateField(default=datetime.date.today)

在模板中,我需要计算从现在开始到end_date的天数。 我试过了:

{% now "d m Y"|timeuntil:placement.end_date|date:"d m Y" %}

但它不起作用。如何获得该日期之前的天数?

3 个答案:

答案 0 :(得分:1)

在模板中使用Django功能是有限制的。您可以通过组合timesince and timuntil方法来计算两个日期之间的差异来解决这个问题。但是,如果在python视图中执行此操作,然后将结果传递给模板,您将从中受益更多。

通过这种方式,您可以真正使用Datetime的强大功能。因此,在views.py和呈现模板的特定函数中,包括:

d0 = datetime.now().date()
d1 = placement.end_date
delta = d0 - d1
print delta.days

您可以阅读有关日期时间文档here的更多信息。现在,您可以在上下文中传递该变量,或者单独传递以由模板

呈现

答案 1 :(得分:0)

选项1:创建自定义过滤器

创建一个自定义过滤器功能,该功能可获取当前日期并计算日期。

您只需在模板中使用:

{{ placement.end_date | days_until }}

要定义和注册过滤器,请将以下代码包含在python文件中:

from datetime import datetime
from django import template

register = template.Library()

@register.filter
def days_until(date):
    delta = datetime.date(date) - datetime.now().date()
    return delta.days

有关Django自定义模板标签和过滤器here.

的更多信息

选项2:计算视图中的日期并将其存储在上下文中

这一天很简单。您计算天数并将信息存储在上下文中:

from datetime import datetime
delta = placement.end_date - datetime.now().date()
context['days_left'] = delta.days

您可以在模板中直接访问它:

{{ days_left }}

但是,如果要将“展示位置”列表传递给模板,则必须将该新信息“附加”到每个展示位置。这是一个不同的主题,实现取决于项目...您可以在放置位置上创建包装器...或将days_left存储在其他词典中...

答案 2 :(得分:0)

因为我喜欢 Django 内置过滤器

<块引用>

时间以来

将日期格式化为自该日期起的时间(例如,“4 天 6 小时”)。

接受一个可选参数,该参数是一个包含日期的变量 用作比较点(没有参数,比较 点是现在)。例如,如果 blog_date 是一个日期实例 代表 2006 年 6 月 1 日午夜,而 comment_date 是一个日期 2006 年 6 月 1 日 08:00 的实例,则以下将返回“8 小时”:

{{ blog_date|timesince:comment_date }}
<块引用>

比较天真偏移和感知偏移的日期时间将返回一个空的 字符串。

分钟是使用的最小单位,返回“0分钟” 相对于比较点的未来任何日期。