Django - 更改模型日期字段的默认展示格式

1 投票
3 回答
10257 浏览
提问于 2025-04-18 16:33

我有一个模型里面有一个日期字段,设置成这样:

date = models.DateField(blank=False, default=datetime.now)

每次我在模板里使用这个字段的数据({{obj.date}})时,它显示的格式是:

July 24, 2014

我想把这个格式永久改成这样:

24.7.2014

另外,我还有一个搜索页面,可以通过日期字段来搜索数据——我也想能用这个格式来搜索。该怎么做呢?

编辑:我觉得这可能和 LANGUAGE_CODE = 'en-us' 的设置有关。当我改变这个设置时,日期的格式也会跟着变。那我该怎么覆盖这个设置呢?

3 个回答

1

如果你关心的是日期是怎么显示的(输出格式),你可以使用一个叫做 date 的过滤器,具体的用法可以在这里找到:

{{ obj.date|date:"d.m.Y"}} 

还有这里有Django的文档

1

使用Python的日期时间模块:

from datetime import datetime

date = models.DateField(blank=False, default=datetime.now().strftime("%d.%m.%Y"))
2

Django使用本地化(l10n)来把数字、日期等格式化成当地的样式。改变你的语言代码(LANGUAGE_CODE)是一个不错的开始,这样Django就能加载正确的环境。

除此之外,你还需要通过设置USE_L10N=True来配置本地化的使用。具体可以参考这个链接:https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-USE_L10N

要让表单字段能够本地化输入和输出数据,只需使用它的localize参数:

class CashRegisterForm(forms.Form):
   product = forms.CharField()
   revenue = forms.DecimalField(max_digits=4, decimal_places=2, localize=True)

这对于日期也同样适用。

(来源: https://docs.djangoproject.com/en/dev/topics/i18n/formatting/#locale-aware-input-in-forms)

补充一下,在模板中使用时,你可以简单地通过以下方式格式化日期:

{% load l10n %}

{{ value|localize }}

或者

{{ your_date|date:"SHORT_DATE_FORMAT" }}

第二种方式是使用settings.py中的SHORT_DATE_FORMAT。

祝好,Marc

撰写回答