使用 Deform 和 mako 的自定义模板和验证
Custom templates and validation with Deform and mako
我在一个使用带有 mako 的金字塔作为模板引擎的项目中使用变形。我为我需要的小部件重写了模板。我正在为其中一种形式使用模态,所以我编写了 mako 模板并使用
设置了表单小部件
form.widget = widget.FormWidget(template='modal')
表单在初始渲染时工作正常,但在调用验证块时
try:
appstruct = self.my_form.validate(controls)
except ValidationFailure as e:
return dict(e.render())
e
不呈现模态模板,而是呈现默认表单。如何使用与表单相同的模板呈现验证表单?
现在我正在使用它来解决它...它会在出现错误时显示警告,但不会在每个字段上显示特定错误:
except ValidationFailure as e:
form.error = e.error
form.field = e.field
return dict(form.render(e.cstruct)
modal
是 deform 演示中的弹出式零售示例。模式节点只有几个文本输入字段。
添加示例:
设施视图:
@property
def form(self):
schema = SQLAlchemySchemaNode(Facility)
return Form(schema, buttons=('submit'))
@view_config(route_name="facilities", renderer="facilities.mako")
def index(self):
form = self.form
form.widget = widget.FormWidget(template="modal")
if 'submit' in self.request.params:
try:
controls = self.request.POST.items()
appstruct = self.facility_form.validate(controls)
except ValidationFailure as e:
return dict(form=e.render())
return dict(form=form.render())
然后 mako 模板只注入 html:
{ form | n }
玩了一段时间后,我想到了这个解决方案(不确定它是否是最优的)。在返回 e.render()
之前,在 e.field
上设置表单属性
@view_config(route_name="facilities", renderer="facilities.mako")
def index(self):
form = self.form
form.widget = widget.FormWidget(template="modal")
if 'submit' in self.request.params:
try:
controls = self.request.POST.items()
appstruct = self.facility_form.validate(controls)
except ValidationFailure as e:
e.field.widget = widget.FormWidget(template="modal")
e.field.set_widgets({}) ## if using different from defaults
e.field.formid = "my-popup" ## and any other non default attributes.
return dict(form=e.render())
return dict(form=form.render())
我在一个使用带有 mako 的金字塔作为模板引擎的项目中使用变形。我为我需要的小部件重写了模板。我正在为其中一种形式使用模态,所以我编写了 mako 模板并使用
设置了表单小部件form.widget = widget.FormWidget(template='modal')
表单在初始渲染时工作正常,但在调用验证块时
try:
appstruct = self.my_form.validate(controls)
except ValidationFailure as e:
return dict(e.render())
e
不呈现模态模板,而是呈现默认表单。如何使用与表单相同的模板呈现验证表单?
现在我正在使用它来解决它...它会在出现错误时显示警告,但不会在每个字段上显示特定错误:
except ValidationFailure as e:
form.error = e.error
form.field = e.field
return dict(form.render(e.cstruct)
modal
是 deform 演示中的弹出式零售示例。模式节点只有几个文本输入字段。
添加示例:
设施视图:
@property
def form(self):
schema = SQLAlchemySchemaNode(Facility)
return Form(schema, buttons=('submit'))
@view_config(route_name="facilities", renderer="facilities.mako")
def index(self):
form = self.form
form.widget = widget.FormWidget(template="modal")
if 'submit' in self.request.params:
try:
controls = self.request.POST.items()
appstruct = self.facility_form.validate(controls)
except ValidationFailure as e:
return dict(form=e.render())
return dict(form=form.render())
然后 mako 模板只注入 html:
{ form | n }
玩了一段时间后,我想到了这个解决方案(不确定它是否是最优的)。在返回 e.render()
之前,在 e.field
@view_config(route_name="facilities", renderer="facilities.mako")
def index(self):
form = self.form
form.widget = widget.FormWidget(template="modal")
if 'submit' in self.request.params:
try:
controls = self.request.POST.items()
appstruct = self.facility_form.validate(controls)
except ValidationFailure as e:
e.field.widget = widget.FormWidget(template="modal")
e.field.set_widgets({}) ## if using different from defaults
e.field.formid = "my-popup" ## and any other non default attributes.
return dict(form=e.render())
return dict(form=form.render())