我在bootstrap页面的模式中显示以下表单 目的是上传一个隐藏ID的文件 该应用程序基于Google App Engine,Python / Webapp2
<form action="someUrl" role="form" method="POST" enctype="multipart/form-data">
<input type="hidden" name="entityId" value="{{datastoreEntity.key.id()}}"/>
<input name="importFile" type="file" multiple>
<input type="text" class="form-control" readonly>
<input type="submit" name="submit" value="Import">
</form>
问题出在相关的RequestHandler(服务器端),我可以用
检索文件 raw_file = self.request.POST.multi['importFile'].file
但我无法获取id(由Jinja2正确生成 - 在页面源中检查)。我已经尝试了
self.request.get('entityId')
self.request.POST['entityId']
self.request.POST.multi['entityId']
答案 0 :(得分:1)
当你以最简单的方式联系它时,我无法重现这个问题。我已将该模板复制到form.html
,将/
直接复制到MainHandler
,并扣除了通常的准备工作(导入,jinja_environment
并带有FileLoader
当前的dir等,我有):
class It(ndb.Model):
name = ndb.StringProperty()
class MainHandler(webapp2.RequestHandler):
def get(self):
dse = It(name="Willy")
dsek = dse.put()
datastoreEntity = dsek.get()
template = jinja_environment.get_template('form.html')
self.response.write(template.render(dict(
datastoreEntity=datastoreEntity,
)))
def post(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.write(self.request.get('entityId'))
访问/
,选择文件,然后点击Import
按钮,我在浏览器上看到:5066549580791808 - 根据需要,它似乎是典型的数据存储区实体ID。
请&#34;插入&#34;在这个玩具超简化版本之间,以及你想要做的更复杂的事情之间,编辑你的Q以向我们展示你可以重现问题的最简单方式,谢谢!
答案 1 :(得分:-1)
通过App Engine中的文件输入上传要求应用程序使用从blobstore API获取的路径。该文件是here。所以你可能想做类似
的事情upload_url = blobstore.create_upload_url('/someUrl')
然后将其注入您的模板,以便表单可以使用它
<form action="{{upload_url}}" ...
文件上传完成后,blobstore将重定向到/someUrl
,您可以在其中处理表单的其余部分,包括.file
。