首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Deform和mako的自定义模板和验证

使用Deform和mako的自定义模板和验证
EN

Stack Overflow用户
提问于 2021-02-16 20:50:36
回答 1查看 199关注 0票数 0

我使用变形在一个项目中,使用金字塔和mako作为模板引擎。我为我需要的小部件重写了模板。我对其中一个表单使用了一个模式,所以我编写了mako模板,并用

form.widget = widget.FormWidget(template='modal')

表单对于初始呈现很好,但是当调用验证块时。

代码语言:javascript
复制
 try:
   appstruct = self.my_form.validate(controls)
     
 except ValidationFailure as e:
   return dict(e.render())

e不呈现模式模板,而是呈现默认表单。如何使验证表单使用与表单相同的模板呈现?

现在,我正在使用它来处理it...it在出现错误时显示的警告,但是没有在每个字段上显示特定的错误:

代码语言:javascript
复制
except ValidationFailure as e:
  form.error = e.error
  form.field = e.field
  return dict(form.render(e.cstruct)

modal是deform演示中的弹出零售示例。模式节点只有两个文本输入字段。

添加示例:

设施视图:

代码语言:javascript
复制
@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:

代码语言:javascript
复制
{ form | n }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-17 17:17:25

在玩了一段时间之后,我想出了这个解决方案(不确定它是否是最佳的)。在返回e.render()之前,在e.field上设置表单属性

代码语言:javascript
复制
@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())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66231975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档