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/