我想从 django 视图发送 JSON 格式的本地化日期
通过
进行普通文本翻译ugettext
还可以
视图中以下代码没有效果:
translation.activate("ru")
print datetime.now().strtime("%B")
输出为 “August”,而不是“Август”
我读到了Python的“locale”模块,但它被命名为线程不安全
如何强制strftime使用django的语言环境?
最后我使用了 django 模板中的日期过滤器:
from django.template.defaultfilters import date as _date
from datetime import datetime
_date(datetime.now(), "d b, D")
tldr;
django.utils.formats;formats.date_format(now, "d b, D")
这是今天模板过滤器的代码:
@register.filter(expects_localtime=True, is_safe=False)
def date(value, arg=None):
"""Format a date according to the given format."""
if value in (None, ""):
return ""
try:
return formats.date_format(value, arg)
except AttributeError:
try:
return format(value, arg)
except AttributeError:
return ""
date_format
调用之外的所有内容对于Python代码来说似乎都不理想/需要,所以我会跳过它们并直接调用date_format。
我找不到
date_format
是否是公共 api,但由于它有一个很好的文档字符串,我认为这很好。
def date_format(value, format=None, use_l10n=None):
"""
Format a datetime.date or datetime.datetime object using a
localizable format.
If use_l10n is provided and is not None, that will force the value to
be localized (or not), otherwise it's always localized.
"""
return dateformat.format(
value, get_format(format or "DATE_FORMAT", use_l10n=use_l10n)
)