在Django模板中使用L10N为一种语言指定日期格式

时间:2019-01-07 15:53:08

标签: django django-templates

在Django模板中,我显示的日期如下:

{{ article.published_at|date }}

显示如下:

  

11月。 2018年21月

我想更改这种格式,但是

  • 我正在使用本地化,所以我不想在模板中指定特定的日期格式-每种语言都有其自己的日期显示方式。

  • DATE_FORMAT设置为L10N时,Django True设置does not have any effect

那我怎么办

  1. 当当前语言为英语(en)时,请为此日期使用其他格式
  2. 如果不是en,请使用当前语言的默认日期格式。

2 个答案:

答案 0 :(得分:0)

您的模板是否包含slim标签?

答案 1 :(得分:0)

这是我最终用来替代内置date filter的过滤器。

# myapp/templatetags/my_filters.py
from django import template
from django.conf import settings
from django.template.defaultfilters import date
from django.utils import dateformat
from django.utils.translation import get_language

register = template.Library()

@register.filter(expects_localtime=True, is_safe=False)
def format_date(value):
    if value in (None, ''):
        return ''

    language_code = get_language()

    if language_code == 'en':
        # Language is English, so use the format defined in settings:
        return dateformat.format(value, settings.DATE_FORMAT)
    else:
        # Language is not English, so use language-specific default:
        return date(value)

我在settings.py中使用常规的DATE_FORMAT Django设置来设置自定义日期格式:

DATE_FORMAT = 'j F Y'

如果当前语言是英语,则使用此选项。否则,将使用当前语言的默认语言。

使用方式:

{% load my_filters %}

{{ article.published_at|format_date }}

您可以扩展它以提供其他语言的自定义格式,但这就是我现在所需要的。

我仍然希望有一种方法可以在设置中定义每种语言的日期格式,所以我仍然觉得自己错过了一种更简单的方法...