2
我要上傳單個文件用下面的漏勺模式:科蘭德變形的文件上傳控件
import colander
import deform
from deform.interfaces import FileUploadTempStore
@view_config(route_name='upload',
renderer='templates/upload.pt',
permission='view')
def upload(self):
tmpstore = FileUploadTempStore()
class Schema(colander.Schema):
name = colander.SchemaNode(
deform.FileData(),
widget=deform.widget.FileUploadWidget(tmpstore),
title='Upload'
)
def on_validated(request, captured):
pass
schema = Schema()
form = deform.Form(schema, buttons=('upload',), formid='form')
html = []
captured = None
if 'upload' in self.request.POST:
try:
controls = self.request.POST.items()
captured = form.validate(controls)
response = on_validated(self.request, captured)
if response is not None:
return response
except deform.ValidationFailure as e:
html.append(e.render())
else:
html.append(form.render())
html = ''.join(html)
return {
'form': html,
}
視圖工作得很好,我可以瀏覽並選擇一個文件。然而,當我按下「上傳」按鈕,我得到的錯誤: TypeError: 'NoneType' object does not support item assignment
的controls
定義,但form.validate()
的問題。它指的是deform/widget.py線1674:
self.tmpstore[uid]['preview_url'] = preview_url