在未调用的现有页面(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.

我可能遗漏了什么?

[1] - https://deformdemo.pylonsproject.org/interfield/

事实证明变形不会自动处理验证,我必须实际调用验证,如下所示:-

try:
    appstruct = form.validate(request.POST.items())
except deform.ValidationFailure as e:
    return {'form': e.render()}