我使用变形在一个项目中,使用金字塔和mako作为模板引擎。我为我需要的小部件重写了模板。我对其中一个表单使用了一个模式,所以我编写了mako模板,并用
form.widget = widget.FormWidget(template='modal')
表单对于初始呈现很好,但是当调用验证块时。
try:
appstruct = self.my_form.validate(controls)
except ValidationFailure as e:
return dict(e.render())e不呈现模式模板,而是呈现默认表单。如何使验证表单使用与表单相同的模板呈现?
现在,我正在使用它来处理it...it在出现错误时显示的警告,但是没有在每个字段上显示特定的错误:
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 }发布于 2021-02-17 17:17:25
在玩了一段时间之后,我想出了这个解决方案(不确定它是否是最佳的)。在返回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())https://stackoverflow.com/questions/66231975
复制相似问题