在Django模板中显示日期时如何有条件地输出年份

在Django模板中显示日期时如何有条件地输出年份,django,django-templates,Django,Django Templates,我有一个显示日期的应用程序。如果日期的年份与当前年份相同,我想用fj格式打印日期;如果日期不同,我想用fj,Y格式打印日期。我认为这是演示逻辑,并希望将其封装在模板代码中,而不修改我的视图。 理想情况下,我想要的是: {{u-date}}{u-date.year==now.year%}{{u-date}date:'Y'}{%endif%} 问题是,我找不到一种方法来获取当前年份,这种方法可以在if标记中使用。我知道我今天可以在模板中包含一个并与之进行比较。但是,我想知道是否有一种方法不必修改我的

我有一个显示日期的应用程序。如果日期的年份与当前年份相同,我想用
fj
格式打印日期;如果日期不同,我想用
fj,Y
格式打印日期。我认为这是演示逻辑,并希望将其封装在模板代码中,而不修改我的视图。

理想情况下,我想要的是:

{{u-date}}{u-date.year==now.year%}{{u-date}date:'Y'}{%endif%}


问题是,我找不到一种方法来获取当前年份,这种方法可以在if标记中使用。我知道我今天可以在模板中包含一个
并与之进行比较。但是,我想知道是否有一种方法不必修改我的视图。

您可能应该使用自定义模板标记filte(),它看起来像

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 }}

您可能应该使用一个自定义模板标记filte(),它看起来像

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 }}

您可能应该使用一个自定义模板标记filte(),它看起来像

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 }}

您可能应该使用一个自定义模板标记filte(),它看起来像

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 }}

这是一个可行的选择。我很好奇是否有任何地方模板可以访问任何“当前”日期。我在查看
request
对象,但运气不好。有一个{%now%}默认模板标记,但它对您的用例没有用处,只用于输出当前日期时间。您可以创建一个上下文处理器,以便将其发送到每个模板渲染,但这不是一个很好的做法。第二个rerun语句应该是:
returnformat(date,'fj,Y')
,这是一个可行的选项。我很好奇是否有任何地方模板可以访问任何“当前”日期。我在查看
request
对象,但运气不好。有一个{%now%}默认模板标记,但它对您的用例没有用处,只用于输出当前日期时间。您可以创建一个上下文处理器,以便将其发送到每个模板渲染,但这不是一个很好的做法。第二个rerun语句应该是:
returnformat(date,'fj,Y')
,这是一个可行的选项。我很好奇是否有任何地方模板可以访问任何“当前”日期。我在查看
request
对象,但运气不好。有一个{%now%}默认模板标记,但它对您的用例没有用处,只用于输出当前日期时间。您可以创建一个上下文处理器,以便将其发送到每个模板渲染,但这不是一个很好的做法。第二个rerun语句应该是:
returnformat(date,'fj,Y')
,这是一个可行的选项。我很好奇是否有任何地方模板可以访问任何“当前”日期。我在查看
request
对象,但运气不好。有一个{%now%}默认模板标记,但它对您的用例没有用处,只用于输出当前日期时间。您可以创建一个上下文处理器,以便将其发送到每个模板渲染,但这不是一个很好的做法。第二个rerun语句应为:
returnformat(date,'fj,Y')