首页 > 解决方案 > 使用 L10N 在 Django 模板中为一种语言指定日期格式

问题描述

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

{{ article.published_at|date }}

显示如下:

2018 年 11 月 21 日

我想改变这种格式,但是

那么我将如何:

  1. en当前语言为英语 ( )时,为此日期使用不同的格式
  2. 不使用当前语言的默认日期格式en

标签: djangodjango-templates

解决方案


这是我最终用作替换内置date过滤器的过滤器。

# 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)

我使用普通的DATE_FORMATDjango 设置settings.py来设置自定义日期格式:

DATE_FORMAT = 'j F Y'

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

像这样使用它:

{% load my_filters %}

{{ article.published_at|format_date }}

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

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


推荐阅读