2017-03-27 40 views
0

我有一个非常有想象力的模型,名称为'model',其中有一个字段'datefinish';用户可以使用MM/DD/YYYY格式输入日期。在我的模板中,当所述模型的datefinish(日期)等于当前日期时,我需要显示一些文本。Django - 检查'if'语句中的日期时间

HTML:

{% if model.datefinish == datetime.today %} 
    <h5>It ends today</h5> 
{% else %} 
    <h5>It does not end today</h5> 
{% endif %} 

怎么可能一个实现这一目标? 我使用Django 1.10 ...谢谢!

+0

你的标题是非常奇特:你是绝对不是“设置”等于某事的“if”陈述。 – khelwood

+0

@khelwood道歉,不知道该怎么说呢 - 有什么建议吗? – jayt

+0

看起来更像你*检查* if语句中的日期时间。 – khelwood

回答

0

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

+1

或添加模板标签 – bodolsog

+0

@bodolsog建议也很好,如果你经常想在多个模型上检查这个 –

0

我会避免超载逻辑模板,并把这张支票到视图(或作为模型属性由丹尼尔的建议):

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,但它看起来有点过于复杂。

2

按丹尼尔的建议,这是我作为喜欢该模型然后选择你拥有它始终可用只要您加载了模型

在模式

@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字段

+0

+1,但是这会引起'NoneType'对象没有属性'date'错误...即使它是一个DateTimeField - 任何想法? – jayt

+0

可能会修复我的代码以测试NoneType,您可能在数据库中将datetimefield设置为null。换句话说,我的代码是 –

+0

:上面的代码假定你总是传递一个有效的对象 –