在未调用的现有页面(mako 模板)验证器中添加变形表单?
Adding a deform form in an existing page (mako template) validator not called?
我有一个现有的 (WIP) 金字塔项目,所有的简单形式都是手工完成的。随着用户需求的复杂性不断增加,我想集成变形形式来简化我自己的 maintenance/programming 任务。
我最初的测试是尝试使用字段间表格[1],目的是确保某个日期早于表格中的另一个日期。这是架构和验证器的简化定义:-
class Schema(colander.MappingSchema):
startdate = colander.SchemaNode(colander.Date())
enddate = colander.SchemaNode(colander.Date())
def validator(form, value):
if value['enddate'] - value['startdate'] < 0:
exc = colander.Invalid(form, 'Start date must precede End date')
exc['enddate'] = 'Must be after %s' % value['startdate']
raise exc
schema = Schema(validator=validator)
form = deform.Form(schema, buttons=('submit',))
然后我将表单传递到我的 mako 模板并调用:-
${form.render() | n}
这会正确呈现表单,并且我的日期选择器可以工作(当然,在我不得不搞砸加载正确的 CSS 和 javascript 之后)。然而,点击提交不会进行任何验证(甚至是基本的“您没有输入值”),而是直接返回到我的 view_config.
我可能遗漏了什么?
事实证明变形不会自动处理验证,我必须实际调用验证,如下所示:-
try:
appstruct = form.validate(request.POST.items())
except deform.ValidationFailure as e:
return {'form': e.render()}
我有一个现有的 (WIP) 金字塔项目,所有的简单形式都是手工完成的。随着用户需求的复杂性不断增加,我想集成变形形式来简化我自己的 maintenance/programming 任务。
我最初的测试是尝试使用字段间表格[1],目的是确保某个日期早于表格中的另一个日期。这是架构和验证器的简化定义:-
class Schema(colander.MappingSchema):
startdate = colander.SchemaNode(colander.Date())
enddate = colander.SchemaNode(colander.Date())
def validator(form, value):
if value['enddate'] - value['startdate'] < 0:
exc = colander.Invalid(form, 'Start date must precede End date')
exc['enddate'] = 'Must be after %s' % value['startdate']
raise exc
schema = Schema(validator=validator)
form = deform.Form(schema, buttons=('submit',))
然后我将表单传递到我的 mako 模板并调用:-
${form.render() | n}
这会正确呈现表单,并且我的日期选择器可以工作(当然,在我不得不搞砸加载正确的 CSS 和 javascript 之后)。然而,点击提交不会进行任何验证(甚至是基本的“您没有输入值”),而是直接返回到我的 view_config.
我可能遗漏了什么?
事实证明变形不会自动处理验证,我必须实际调用验证,如下所示:-
try:
appstruct = form.validate(request.POST.items())
except deform.ValidationFailure as e:
return {'form': e.render()}