在未调用的现有页面(mako模板)验证器中添加变形表单​​?

时间:2016-11-15 09:49:31

标签: validation pyramid mako deform

我有一个现有的(WIP)金字塔项目,简单的表格都是手工完成的。随着用户要求的复杂性不断增加,我想整合变形表单以简化我自己的维护/编程任务。

我的初步测试是尝试一个场间形式[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和javascripts之后)。但是,点击提交不会进行任何验证(即使是基本的&#39;您也没有输入值&#39;),而是直接返回我的view_config。

我能错过什么?

[1] - http://deformdemo.repoze.org/interfield/

1 个答案:

答案 0 :(得分:0)

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

    void func(int *q);   

    int main()
    {
       int a;
       func(&a);
       printf("%d \n",a);
    }

    void func(int *q)
    {
       *q = 10;
    }