sách gpt4 ai đã đi

Django Forms forms.DateInput/forms.DateField trong mã mẫu: định dạng không nhất quán giữa {{ form.datefield }} và {{ form.datefield.value }}

In lại 作者:行者123 更新时间:2023-12-01 03:33:22 27 4
mua khóa gpt4 Nike

我的设置.py:

LANGUAGE_CODE = 'de'
TIME_ZONE = require_env("TIME_ZONE_IDENTIFIER")
USE_I18N = True
USE_L10N = True
USE_TZ = True


DATE_INPUT_FORMATS = [
'%d.%m.%Y', '%d.%m.%y', # European
'%Y-%m-%d', # ISO (for native mobile datepickers)
'%m/%d/%Y', '%m/%d/%y', # US
'%d %b %Y', '%d %B %Y', # some long formats
]

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

表单.py:

class SomeForm(forms.ModelForm):

birth_date = forms.DateField(
widget=forms.DateInput(
format='%Y-%m-%d',
attrs={
"class": "form-control text-input",
}
),
input_formats=settings.DATE_INPUT_FORMATS,
initial=datetime.datetime.today,
# required=False,
# label=_("birth date"),
)

现在,如果我想在模板中自己构建输入,我会这样做:

 
class="form-control text-input" type="text"
value="{{ form.birth_date.value }}"
{% if form.birth_date.field.required %}required{% endif %}/>

在下图中您可以看到上面的模板代码与 {{ form.birth_date }} 之间的区别:

nhập mô tả hình ảnh ở đây

{{ form.birth_date }} 底部灰色框,遵守格式,{{ form.birth_date.value }} 上部绿色框,不遵守格式。

这可以以某种方式解释吗?还是我应该将其添加到 Django 错误跟踪器中?

1 Câu trả lời

是的,在模板中包含 field 实例或 field 实例的 field.value 是有区别的。

当您在模板中渲染字段Ví dụ时,它是小部件的 Widget.render方法被调用,结果是 Widget.format_value方法被调用。

最后一个方法实际上呈现 python date objectsử dụng localize_input người giúp việc 转换为字符串。这是该函数的相关部分:

def localize_input(value, default=None):
# ...
elif isinstance(value, datetime.date):
value = datetime_safe.new_date(value)
format = force_str(default or get_format('DATE_INPUT_FORMATS')[0])
return value.strftime(format)

如上所示,使用您指定的格式(或 DATE_INPUT_FORMATS 中的第一个值)。

但是,当您访问field.value时属性,您实际上得到 "raw" python date value (尽管有误导性的文档)。当模板评估变量节点时,根据您的示例,它使用您的 DATE_FORMAT设置,正如文档提到的:

The default formatting to use for displaying date fields in any part of the system

如果您想以不同的格式呈现该值,您可以使用 ngày template filter 轻松完成此操作;像这样:

{{form.birth_date.value|date:"%Y-%m-%d"}} == {{form.birth_date}}

或者通过更新设置来更改系统范围的默认值:

DATE_FORMAT = "%Y-%m-%d"

关于python - 模板代码中的 Django Forms forms.DateInput/forms.DateField : formatting inconsistency between {{ form. datefield }} 和 {{ form.datefield.value }},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40621685/

27 4 0
Bài viết được đề xuất: javascript - 使用正则表达式限制文本框中的输入
Bài viết được đề xuất: javascript - 在 ReactJS 中将其作为 prop 传递
Bài viết được đề xuất: python - wxPython图像占用大量内存
Bài viết được đề xuất: Python:在没有列表的情况下取第一个字符
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com