gpt4 book ai didi

python - FormEncode 中的 ForEach 和 NestedVariables 在 Pyramid 中创建表单项数组

转载 作者:太空宇宙 更新时间:2023-11-03 12:09:55 25 4
gpt4 key购买 nike

我正在使用 Pyramid 和 FormEncode 来尝试创建和验证地址列表。我正在使用 pyramid_simpleform 并一直在查看本教程 http://jimmyg.org/blog/2007/multiple-checkboxes-with-formencode.html和之前的问题 Pylons FormEncode with an array of form elements但我仍然有一些问题。我目前的结构如下:

架构:

from formencode import Schema, validators, ForEach, NestedVariables

class AddressSchema(Schema):
allow_extra_fields = False
addresses = validators.String(not_empty=True)

class JobSchema(Schema):
filter_extra_fields = True
allow_extra_fields = True
pre_validators = [NestedVariables()]
job_name = validators.MinLength(5, not_empty=True)
comments = validators.MinLength(5, not_empty=False)
addresses = ForEach(AddressSchema())

模板:

${renderer.errorlist("addresses")}
${renderer.errorlist("job_name")}

<p><label for="job_name">Job name: </label>${renderer.text("job_name", size=30)}</p>
% for a in range(1, initial_number_of_address_fields):
<p><label for="addresses-${a}">Address: </label>${renderer.textarea("addresses-" + str(a), cols=39, rows=6)}</p>
% endfor
${renderer.submit("submit", "Submit")}

查看:

@view_config(route_name='add_addresses', renderer="add_addresses.mak")
def add_addresses(request):

from myproject.forms import JobSchema
from myproject.models import Job
from formencode import htmlfill, variabledecode, ForEach

initial_number_of_address_fields = 5

form = Form(request, schema=JobSchema(), variable_decode=False)
renderer = FormRenderer(form)

# if the form has been submitted
if 'submit' in request.POST:

if form.validate(): # uses validation specified in forms.py

# automatically bind to provided form
obj = form.bind(Job()) # no exisiting id provided, so a new document is created
# add some additional values
obj.__setattr__("last_updated_on", datetime.date.today().strftime('%Y/%m/%d'))
#save
obj.save()
return HTTPFound(location="/")

return {
'title':'Add addresses',
'initial_number_of_address_fields': initial_number_of_address_fields,
'renderer': renderer
}

我像这样返回实际的验证错误:

{'addresses': u'Missing value'}

但是正确填写的值也会报错:

The input must be dict-like (not a : u'dgfgfd')

如果我将 variable_decode 更改为 True(在变量设置的形式中),我将不再收到任何错误。我想我应该以某种方式使用 variable_decode,但我不确定如何使用。我如何正确验证这些值?

最佳答案

我在2009年写过一篇类似用法的博文,也许能派上用场:

http://www.domenkozar.com/2009/07/22/advanced-formencode-usage/

关于python - FormEncode 中的 ForEach 和 NestedVariables 在 Pyramid 中创建表单项数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7251488/

25 4 0
文章推荐: android - TabActivity 使用的 BadTokenException ActivityGroup
文章推荐: c# - 在 Razor Pages 中为页面处理程序方法授权 Tag Helper
文章推荐: c# - PropertyGrid --> 从 List 中选择对象