如何比较Django中的date

我想比较一个date到Django中的当前date,最好在模板中,但也可以在呈现模板之前做。 如果date已经过去,我想说“过去”,而如果是将来,我想给出date。

我希望能做到这样的事情:

{% if listing.date <= now %} In the past {% else %} {{ listing.date|date:"d MY" }} {% endif %} 

现在是今天的date,但这是行不通的。 在Django文档中我找不到任何关于此的信息。 任何人都可以给一些build议?

在视图中比较date,并将诸如in_the_past (boolean)之类的in_the_past传递给extra_context。

或者更好地将其作为属性添加到模型中。

 from datetime import date @property def is_past_due(self): return date.today() > self.date 

然后在视图中:

 {% if listing.is_past_due %} In the past {% else %} {{ listing.date|date:"d MY" }} {% endif %} 

基本上模板不是date比较IMO的地方。

我将date_now添加到上下文处理器的列表中。

所以在模板中有一个名为“date_now”的variables,它只是datetime.datetime.now()

在文件context_processors.py中创build一个名为date_now的上下文处理器

 import datetime def date_now(request): return {'date_now':datetime.datetime.now()} 

在settings.py中,修改CONTEXT_PROCESSORS来包含它,就我而言

 app_name.context_processors.date_now 

从Django 1.8开始,下面这个稍微令人不愉快的构造完成了这个工作:

 {% now "Ymd" as todays_date %} {% if todays_date < someday|date:"Ymd" %} <h1>It's not too late!</h1> {% endif %} 

黑客,但它避免了自定义标签或上下文处理器的需要。

除了@ bx2有益的答案,如果你的领域是一个date时间领域只是调用date()函数来模型datetimefield:

 from datetime import date @property def is_past_due(self): if date.today() > self.date.date(): return True return False 

你总是可以传递datetime.datetime.now(因为django模型使用Python的标准date时间对象)。

使用render_to_response,你可以做这样的事情(导入date时间后):

 return render_to_response('template.html', {'now': datetime.datetime.now()}) 

现在您可以访问模板中的“now”,您可以像比较示例中那样比较date。

此外,如果你在你的视图中使用RequestContext,你将能够添加“now”作为context_processor,如果你在多个文件中需要这个。 这会将“now”添加到使用RequestContext呈现的任何模板中。

然而,更简单的是,您只需获取原始查询集中之前的logging列表,并避免首先查询无用的数据:

 listing.objects.filter(date__lt=datetime.datetime.now()) 

我发现这个问题,并有类似的问题。 如果只是在过去发生,我正在寻找信息。

在模板中使用Django的“timesince”标签,我能够解决我的问题。 我不是说这是有效的,但对我有用。

在模板中:

 {% if model_name.date_time|timesince >= "1 min" %} <p>In the past</p> {% else %} <p>{{ model_name.date_time }}</p> {% endif %}