2017-03-27 8 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 model.datetime_field|is_today %} 

を行うことができる非常に独特です:あなたは、間違いなく 'if'文を何かに"設定 "してはいけません。 – khelwood

+0

@khelwood謝罪、それ以外の言葉を言いたいことはありませんか? – jayt

+0

'if'ステートメントでdatetimeをチェックしているように見えます。 – khelwood

答えて

0

テンプレートでこれを行わないでください。このチェックを行い、ブール値を返し、テンプレート内でそれを呼び出すメソッド(例えば、finishes_today)をモデルに記述します。

+1

またはtemplatetagを追加する – 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もありますが、それは少し過度に複雑に見えるん。

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

これは「datefinish」であることを前提としています。あなたはそのモデルモードで

をロードするたびに、私は、その後のように好むダニエルの提案、あたりなど

2

モデルのオプションは、あなたはそれを常に用意してその範囲内であればDateFieldのではなく、DateTimeField型は、あなたがself.datefinish.date() == ...

を行うだろうDateTimeField型のために、あなたはまた、

すなわち、見ることができます

モデルに2つの日付がある場合。

かのようなテンプレートタグを作成します。

@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(): 

は、テンプレートにあなたはフィルターがあなたのタイトルのDateFieldやDateTimeField型

+0

+1これは 'NoneType'オブジェクトに属性 'date'エラーがありません。DateTimeField - anyアイデア? – jayt

+0

がNoneTypeをテストするためにコードを修正する可能性がありますが、datetimeフィールドがデータベースにnullに設定されている可能性があります。 –

+0

つまり、上のコードは、あなたが常に有効なオブジェクトを渡していることを前提としています –

関連する問題