gpt4 book ai didi

python - Django 形成 HTML5 验证模式

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:13 29 4
gpt4 key购买 nike

Dugen Chen 写了一篇有用的文章,介绍如何将 HTML5 验证中的“required”属性添加到 Django 表单字段。 http://duganchen.ca/elegantly-adding-html5-validation-attributes-to-django-form-fields/

我还希望自动包含 HTML5 模式属性,这样如果这是我的表单:

class AccountEditForm(forms.Form):
email = forms.EmailField()
phone = forms.CharField(widget=forms.IntegerField)

然后将创建以下 html:

<input type="email" name="email" id="id_email" required pattern="-email regex-" />
<input type="text" name="phone" id="id_phone" required pattern="-integer regex-" />

杜根使用了这个方法:

compose = lambda f, g: lambda *args, \
**kwargs: f(g(*args, **kwargs))

def html5_required(field):
if field.required != False:
field.widget.attrs['required'] = 'required'
return field

CharField = compose(html5_required, CharField)

这样表单仍然可以这样写

class SampleForm(form):
text_field = CharField()

并且“required”属性将被适当添加

有人可以解释如何对模式属性执行类似的操作吗?所有这些都可以通过装饰器应用,以便这些困惑可以驻留在其他地方吗?

理想情况下,是否有一组标准化的正则表达式模式来匹配每个 Django 表单字段,并且有人构建了一个小型库来轻松将其添加到 Django 中吗?

谢谢!

最佳答案

这里我想到了两个选择。您可以创建一个 mixin 来更新类上的所有字段,或者对标准库进行 Monkeypatch。

对于monkeypatch,你会做类似的事情:

from django.forms import fields
fields.__dict__.update({
name: compose(html5_required, field)
for name, field in fields.__dict__.iteritems()
if issubclass(field.__class__, fields.Field)
})
mixin 方法基本上会做同样的事情,但是通过迭代属性涉及一些元编程魔法,并在必要时重新定义它们。一般概念是 outline here .

关于python - Django 形成 HTML5 验证模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15178972/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com