Django - 在'if'语句中检查日期时间

时间:2017-03-27 15:21:03

标签: python django

我有一个非常有想象力地称为“foreman start -f Procfile.dev”的模型,其中包含一个字段“model”;用户可以在此处以MM / DD / YYYY格式输入日期。在我的模板中,当所述模型的datefinish(日期)等于当天时,我需要显示一些文本。

HTML:

datefinish

如何实现这一目标? 我正在使用Django 1.10 ...谢谢!

3 个答案:

答案 0 :(得分:2)

根据Daniel的建议选择模型选项,我更喜欢这样,只要你加载那个模型就可以随时使用

模式:

@property
def is_today(self):
  return self.datefinish == datetime.today().date()

这假设'datefinish'是DateField,而不是DateTimeField,对于DateTimeField,你会做self.datefinish.date() == ...

你还可以看到它是否在一个范围内,即

return self.start_date <= datetime.today().date() <= self.end_date

如果模型中有两个日期。

或创建模板标签,如:

@register.filter
def is_today(dt):
  if isinstance(dt, datetime):
    return dt.date() == datetime.today().date():
  if isinstance(dt, date):
    return dt == datetime.today().date():

然后在模板中你可以做

{% if model.datetime_field|is_today %}

过滤器可以处理DateField和DateTimeField

答案 1 :(得分:0)

不要在模板中执行此操作。在模型上编写一个方法 - 例如调用finishes_today - 执行此检查并返回一个布尔值,并在模板中调用它。

答案 2 :(得分:0)

我会避免使用逻辑重载模板并将此检查放入视图中(或者作为Daniel建议的模型属性):

is_today = model.datefinish == datetime.today()

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

然后,在您的模板中,只需检查上下文中传递的变量:

{% if is_today %}
   <h5>It ends today</h5>
{% else %}
   <h5>It does not end today</h5>
{% endif %}

还有this option,但它确实看起来有点过于复杂。