烧瓶-request.files.getlist()-不要跳过空

时间:2019-02-04 10:22:34

标签: python flask

我有4个文件输入和4个文本输入的表单

表单图像

enter image description here

HTML代码

<form action="{{ url_for('Test.Test') }}" method="POST" enctype=multipart/form-data >

 <input type="file" name="Image"/>
 <input type="text" name="Name"/><br/>
 <input type="file" name="Image"/>
 <input type="text" name="Name"/><br/>
 <input type="file" name="Image"/>
 <input type="text" name="Name"/><br/>
 <input type="file" name="Image"/>
 <input type="text" name="Name"/><br/>
 <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
  <input type="submit"/>
</form>

我只填写3/4个文件输入和所有文本输入

当我尝试使用以下代码处理此表单时:

GetFiles = request.files.getlist('Image')
Name = request.form.getlist('Name')
for x, y in zip(GetFiles, Name):
   print x, y

预期结果

<FileStorage: u'1.jpeg' ('image/jpeg')> 1
<FileStorage: u'2.jpeg' ('image/jpeg')> 2
None 3
<FileStorage: u'3.jpeg' ('image/jpeg')> 4

但我知道

<FileStorage: u'1.jpeg' ('image/jpeg')> 1
<FileStorage: u'2.jpg' ('image/jpeg')> 2
<FileStorage: u'3.jpeg' ('image/jpeg')> 3

感谢您的回答

1 个答案:

答案 0 :(得分:0)

最重要的是:GetFiles有3个元素(因为只选择了3个文件),Name有4个元素。 Python zip doc说:

  

最短的可迭代输入耗尽时,迭代器停止。

您知道哪个“图像”与哪个“文本”一起使用,但是计算机却不知道。一种方法:

  • 在html中:给每个图像输入一个唯一的名称,例如name="Image-1"
  • 在py中:遍历Names并“获取”附带的图像 该名称(例如request.files.get('Image-'+{index})
  • 别忘了,如果找不到密钥,get()将返回None
  • 别忘了,如果您使用类似的方式遍历Names range(len(Names))将被索引为0。