Django:如何格式化DateField的日期表示?

19 django format formatting localization datefield

我有一个带有DateField的表单.现有日期值的格式设置为如下所示:

2009-10-03

我该如何格式化它,使它看起来像这样:

03.10.2009

我找到了一个像这样呈现它的小部件,但验证不允许我输入的值.

Cat*_*lus 37

要显示格式正确的初始字段值,请使用DateInput小部件.要自定义验证,请使用input_formats关键字参数DateField.

为什么你需要同时formatinput_formats

format - 将显示此字段初始值的格式.看到这里.

input_formats- 用于尝试将字符串转换为有效datetime.date对象的格式列表.看到这里.

  • 谢谢这个工作...现在看起来像这样:my_date = forms.DateField(ini​​tial = date.today(),widget = forms.DateInput(format ='%d.%m.%Y'),input_formats =(' %d.%米.%Y",)) (14认同)

Che*_*OUA 11

方法1:手动格式渲染但未通过日期字段格式验证

所以最好的格式化解决方案就是"."

{{field.value.day|stringformat:"02d"}}.{{field.value.month|stringformat:"02d"}}.{{field.value.year}}
Run Code Online (Sandbox Code Playgroud)

得到24.05.2010

我添加了stringformat:"02d"以得不到25.5.2010作为输出值.

我发布了一个字段的完整代码来获得一个想法:

<input class="form-control" data-inputmask="'mask':'99.99.9999'" data-toggle="masked"  name="{{field.html_name}}" placeholder="{{ field.label }}" {% if field.field.required %}required=""{% endif%} type="text" value="{{field.value.day|stringformat:"02d"}}.{{field.value.month|stringformat:"02d"}}.{{field.value.year}}" " >
Run Code Online (Sandbox Code Playgroud)

我主要将这种格式用于更新(模型)表单(UpdateView类)的现有实例上的日期值.

如果提交更新表单不符合格式,则此解决方案可能会失败

方法2 :(更好)自动化字段值格式化+使用设置进行正确验证

这是通过向settings.py文件添加自定义本地设置来完成的:最重要的部分是DATE_INPUT_FORMATS元组

..
..
USE_L10N = True
..

DATE_INPUT_FORMATS = (
    '%d.%m.%Y', '%d.%m.%Y', '%d.%m.%y',  # '25.10.2006', '25.10.2006', '25.10.06'
    '%d-%m-%Y', '%d/%m/%Y', '%d/%m/%y',  # '25-10-2006', '25/10/2006', '25/10/06'
    '%d %b %Y',  # '25 Oct 2006', 
    '%d %B %Y',  # '25 October 2006', 
)

DATE_FORMAT = 'j F Y'
TIME_FORMAT = 'H:i'
DATETIME_FORMAT = 'j F Y H:i'
YEAR_MONTH_FORMAT = 'F Y'
MONTH_DAY_FORMAT = 'j F'
SHORT_DATE_FORMAT = 'j N Y'
SHORT_DATETIME_FORMAT = 'j N Y H:i'
FIRST_DAY_OF_WEEK = 1
Run Code Online (Sandbox Code Playgroud)

最重要的:

  1. 日期字段的验证是在插入和更新时完成的,所有格式都存在于DATE_INPUT_FORMATS元组中
  2. 在updateView上,日期字段将使用DATE_INPUT_FORMATS元组的第一种格式呈现(我的意思是使用DATE_INPUT_FORMATS [0] =='%d.%m.%Y')

因此,第一个元素的选择在此元组中很重要,因为它定义了更新表单上datefield的现有值的格式

您也可以使用第一种格式在UpdateViews上应用javascript验证.

在django 1.6和1.7上测试过,不知道以前的版本


sor*_*rki 6

子类自定义字段如下:

class CustomDateField(forms.DateField):
  def __init__(self, *args, **kwargs):
    kwargs.setdefault('input_formats', ("%d.%m.%Y",))
    super(CustomDateField, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以通过以下方式在模板中显示日期

{{ your_object.date_field.day }}.{{ your_object.date_field.month }}.{{ your_object.date_field.year }}
Run Code Online (Sandbox Code Playgroud)