2017-04-11 26 views
0

我有以下models.py文件的应用程序:Django的 - 在模板标签DateTime字段与服务器时间比较

from django.db import models 
import datetime 

class Event(models.Model): 
     name = models.CharField(max_length=255) 
     description = models.TextField() 
     event_date = models.DateField(auto_now_add=False) 
     today_date = models.DateField(default=datetime.date.today) 

     class Meta: 
       ordering = ('event_date',) 

     def __unicode__(self): 
       return self.name 

而在我的模板,我有一个事件列表,我想页面确认如果事件的日期在过去或未来从今天的日期开始加载,则每次加载。因此,如果明天我访问该页面,则今天的日期将是2017年4月12日,依此类推。我的模板代码是这样的:

{% extends "base.html" %} 

{% block page_title %} 
Events 
{% endblock %} 
{% block content%} 
<ul> 
    {% for event in object_list %} 
    {% if event.event_date <= event.today_date %} 
    <li> 
     <a href="{% url " events:details" %}"> 
     {{ event.name }} | <span class="event_past">PAST EVENT</span> 
     </a> 
    </li> 
    {% else %} 
    <li> 
     <a href="{% url " events:details" %}"> 
     {{ event.name }} | 
     </a> 
    </li> 
    {% endif %} 
    {% endfor %} 
</ul> 
{% endblock %} 

</body> 
</html> 

这是正确的方法吗?

回答

2

您不应创建today_date字段。当创建对象时,它将被设置为默认值,但不会每天自动更新。

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

你可以通过今天的日期从您的视图模板上下文中的变量,做模板的比较,但最好保持模板尽可能简单。更好的方法是在你的模型上创建一个方法,例如is_future_event

from datetime import date 

class Event(models.Model): 
    event_date = models.DateField() 
    ... 

    def is_future_event(self): 
     return self.event_date > date.today() 

然后在你的模板,你可以调用方法如下:

{% for event in object_list %} 
    {% if event.is_future_event %} 
     Future event 
    {% else %} 
     Today or in the past 
    {% endif %} 
{% endfor %} 
+0

它的工作!非常感谢你。我不确定如何在模型中做到这一点,但我同意模板必须简单。 – Albert