django - 使用 L10N 在 Django 模板中为一种语言指定日期格式
问题描述
在 Django 模板中,我显示的日期如下:
{{ article.published_at|date }}
显示如下:
2018 年 11 月 21 日
我想改变这种格式,但是:
我正在使用本地化,所以我不想在模板中指定特定的日期格式——每种语言都有自己的日期显示方式。
当设置为时, Django
DATE_FORMAT
设置没有任何效果。L10N
True
那么我将如何:
en
当前语言为英语 ( )时,为此日期使用不同的格式- 不使用当前语言的默认日期格式
en
解决方案
这是我最终用作替换内置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_FORMAT
Django 设置settings.py
来设置自定义日期格式:
DATE_FORMAT = 'j F Y'
如果当前语言是英语,则使用此选项。否则使用当前语言的默认值。
像这样使用它:
{% load my_filters %}
{{ article.published_at|format_date }}
您可以扩展它以提供其他语言的自定义格式,但这就是我现在所需要的。
我仍然希望有一种方法可以在设置中定义每种语言的日期格式,所以我仍然觉得我错过了一种更简单的方法......