2017-04-11 7 views
0

をDateTimeのフィールドを比較しますイベントの日付が今日または過去の日付である場合は、毎回ロードされます。もし明日私がページにアクセスすれば、今日の日付は2017年4月12日となります。私のテンプレートコードは次のようなものです:Djangoの私は、次のmodels.pyファイルとアプリを持っているテンプレートタグでサーバーの時刻と

{% 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

関連する問題