我想在 Django 中格式化日期对象。具体来说,我想在 settings.py
中使用 DATE_FORMAT
。使用Django Documentation ,我将其设置为:DATE_FORMAT = 'l, m F Y'
。小写的 l
表示工作日名称。
在模板中,我使用 {{ value|date:"DATE_FORMAT"}}
,但它从不呈现工作日名称。
如果我执行:{{ value|date:"l, m F Y"}}
,我会得到预期的结果。
settings.py 中允许的内置日期过滤器是否有任何限制?
谢谢!
最佳答案
简短回答:由于本地化 (L10N),语言定义的格式优先于您定义的格式。
发生这种情况的原因可能是因为您启用了 L10N
,这意味着您没有使用 settings.py
中指定的 DATE_FORMAT
。这在 the documentation on DATE_FORMAT
中指定。 :
Note that if
USE_L10N
is set toTrue
, then the locale-dictated format has higher precedence and will be applied instead
因此,通过在您的设置中设置 L10N = True
,如果为该语言定义了此类格式,它将采用该格式,而不是您指定的格式。
事实上,如果我们导入django.conf.locale.en.formats
,我们会看到:
>>> import django.conf.locale.en.formats
>>> django.conf.locale.en.formats.DATE_FORMAT
'N j, Y'
因此,由于 L10N
,它被渲染为 'N j, Y'
,事实上,如果我们使用该格式渲染时间戳,则两者是相同的:
>>> Template('{{ value|date:"DATE_FORMAT" }}').render(Context({'value': timezone.now()}))
'Sept. 7, 2019'
>>> Template('{{ value|date:"N j, Y" }}').render(Context({'value': timezone.now()}))
'Sept. 7, 2019'
您可以将USE_L10N
设置为False
,从而使用指定的格式。
# settings.py
# ...
USE_L10N = <b>False</b>
# ...
或手动指定格式。但通常 L10N
用于根据以事件语言显示日期的首选方式来格式化日期(和其他元素)。
关于python - Django DATE_FORMAT 工作日名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57832479/