python - Django 形成 HTML5 验证模式

标签 python django html forms validation

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/

相关文章:

python - 根据 Google BigQuery 中的查询结果创建表

python - 获取从 random.sample(list,2) 检索到的值的索引?

php - 如何以编程方式生成连接重置?

python - Django 在不知道字段名称的情况下将模型导出到 csv

javascript - CKEditor - 如何获取模板属性

javascript - 如何使用 jQuery 过滤特定大小的图像?

html - 在 CSS Grid 1 行多列的行元素中

python - 在 Python 中定义具有自动生成的 __init__ 和来自值字典的附加 init2 的数据类的正确方法是什么

python - Tornado Sentry 集成

python - 如何获取()这个属于 userprofile.team 的模型