2014-10-03 66 views
0

我有一個顯示日期的應用程序。如果日期的年份與當前年份相同,我想在F j格式中打印日期,如果格式不同,則格式爲F j, Y。我會認爲這是表示邏輯,並希望將其封裝在模板代碼中,而不修改我的視圖。如何在Django模板中顯示日期時有條件地輸出一年

理想情況下,我想是這樣的:

{{ the_date|date:'F j' }}{% if the_date.year == now.year %}{{ the_date|date:', Y' }}{% endif %}

的問題是,我無法找到獲取當前的一年能的標籤,如果內使用方式的一種方式。我知道我可以在我的模板中加入一個today_dt並與之比較。但是,我想知道是否有辦法不必修改我的意見。

回答

3

你應該使用一個自定義模板標籤過濾接(https://docs.djangoproject.com/en/dev/howto/custom-template-tags/)看起來像

import datetime 

from django import template 
from django.utils.dateformat import format 

register = template.Library() 

@register.filter 
def custom_date(date): 
    now = datetime.datetime.now() 
    if date.year == now.year: 
     return format(date, 'F j') 
    return format('F j, Y') 

然後在模板

{% load custom_tags %} 

{{ the_date|custom_date }} 
+0

這是一個選項,它會工作。我很好奇,如果有任何地方的模板可以訪問任何「當前」日期。我正在環顧'request'對象,但沒有運氣。 – 2014-10-03 11:35:25

+0

有一個{%now%}默認模板標籤,但是對於您使用的用例而言,它僅用於輸出當前日期時間。你可以創建一個上下文處理器,以便它被髮送到每一個模板渲染,但這不是一個很好的做法。 – 2014-10-03 14:29:34

+0

模板標記代碼中的小錯誤。第二個重新運行的語句應爲:'返回格式(日期,'F j,Y')' – 2015-11-06 05:04:45