Django 视图中的本地化日期 strftime

问题描述 投票:0回答:2

我想从 django 视图发送 JSON 格式的本地化日期

通过

进行普通文本翻译

ugettext

还可以

视图中以下代码没有效果:

translation.activate("ru")
print datetime.now().strtime("%B")

输出为 “August”,而不是“Август

我读到了Python的“locale”模块,但它被命名为线程不安全

如何强制strftime使用django的语言环境?

python django localization
2个回答
98
投票

最后我使用了 django 模板中的日期过滤器:

from django.template.defaultfilters import date as _date
from datetime import datetime

_date(datetime.now(), "d b, D")

0
投票

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)
    )
© www.soinside.com 2019 - 2024. All rights reserved.