Django模板中的TimeField格式

19 投票
2 回答
35510 浏览
提问于 2025-04-17 04:06

我正在用 Django 写一个应用程序,并在模型中使用了几个 TimeFields。我只想处理 hh:mm 这种时间格式(不想要 hh:mm:ss 或者上午/下午的格式)。我已经根据文档设置了 TIME_FORMAT = 'H:i'USE_L10N = False

如果 USE_L10N 设置为 True,它会覆盖 TIME_FORMAT

在我的模板中,我使用了 Django 自动创建的输入框,比如:

{{formName.timeField}}

问题是,当我输入 "10:00" 并提交 POST 时,Django(或者其他东西)会把它变成 "10:00:00"(也就是加上了秒数)。

  • 有没有办法指定日期时间字段显示保存日期的格式?如果我能在输入框的值中使用类似 |date:"H:i" 的东西,那就解决了。

另一方面,我知道我可以手动创建输入框(不直接使用 {{formName.timeField}}),但我之前在这方面遇到过一些问题,所以我想暂时避免这样做。

还有一个类似的问题在 Django TimeField Model without seconds,但那个解决方案不管用(它给我返回了 'NoneType' 对象没有 'strptime' 属性)。

2 个回答

12

假设你有一个想要所有 TimeFields 使用的时间格式,你可以在设置文件中添加 TIME_INPUT_FORMATS。比如说,设置 TIME_INPUT_FORMATS = ('%I:%M %p',) 就会把你的时间格式化成 "5:30 PM" 这样的样子。

文档链接: https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-TIME_INPUT_FORMATS

29

我在我的应用中也遇到了这个问题,后来通过给Django的TimeInput小部件传递一个format参数来解决了它:

from django import forms

class SettingsForm(forms.Form):
    delivery_time = forms.TimeField(widget=forms.TimeInput(format='%H:%M'))

撰写回答