如何比较Django中的日期

Her*_*aaf 43 python django django-templates

我想将日期与Django中的当前日期进行比较,最好是在模板中,但在渲染模板之前也可以这样做.如果日期已经过去,我想说"过去",如果是将来,我想给出日期.

我希望有人可以这样做:

{% if listing.date <= now %} 
     In the past 
{% else %} 
     {{ listing.date|date:"d M Y" }} 
{% endif %}
Run Code Online (Sandbox Code Playgroud)

现在是今天的日期,但这不起作用.我在Django文档中找不到任何相关内容.谁能提出一些建议?

bx2*_*bx2 91

比较视图中的日期,并将类似in_the_past(boolean)的内容传递给extra_context.

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

from datetime import date

@property
def is_past_due(self):
    return date.today() > self.date
Run Code Online (Sandbox Code Playgroud)

然后在视图中:

{% if listing.is_past_due %}
    In the past
{% else %}
    {{ listing.date|date:"d M Y" }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

基本上模板不是IMO日期比较的地方.

  • 我不这么认为:(同样来自编码风格,重构POV,能够将'is_past_due`作为属性进一步复制,即其他模板更好,否则你必须复制粘贴相同的模板代码再来一次. (3认同)

Dir*_*rom 13

从Django 1.8开始,以下稍微令人反感的构造完成了这项工作:

{% now "Y-m-d" as todays_date %}
{% if todays_date < someday|date:"Y-m-d" %}
   <h1>It's not too late!</h1>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

Hackish,但它避免了对自定义标记或上下文处理器的需求.

  • `德克++; 姜戈--` (2认同)

adi*_*gar 9

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

所以在模板中有一个名为"date_now"的变量,它只是datetime.datetime.now()

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

import datetime

def date_now(request):
    return {'date_now':datetime.datetime.now()}
Run Code Online (Sandbox Code Playgroud)

在settings.py中,修改CONTEXT_PROCESSORS以包含它,就我的情况而言

app_name.context_processors.date_now
Run Code Online (Sandbox Code Playgroud)