HTML表单构建 / Django请求.POST帮助

5
我不确定是我在构建表单方面有问题还是没有想到正确的方法。我试图构建一个类似于Gmail“撰写”表单的表单,其中包含一个AJAX图片上传器。我有一部分代码可以上传图片并返回图像ID。一旦我收到图像ID,我尝试将其附加到我的表单中隐藏的复选框字段中。我希望允许用户上传多个图像,并且我也想保持所有隐藏的复选框名称相同,以便我可以轻松地迭代值。基本上是这样的:
客户端(这是来自Gmail的代码,但在我的代码中,它们将被隐藏):
<input type="checkbox" checked="" value="125e6e5e7d8a2601_125e6e5e7d8a2601_0.2_-1" name="attach" id=":4s"/>
<input type="checkbox" checked="" value="125e6e5e7d8a2601_125e6e5e7d8a2601_0.1_-1" name="attach" id=":50"/>

服务器端:

       for picture_id in request.POST["attach"]:
            #do stuff here with the picture_id

很不幸,我只收到了一个picture_id,而request.POST["attach"]像字符串一样迭代它。 我不确定如何解决我的问题并发送所有图像ID,而不使用像表单<select>这样的东西,其中可以选择多个项目,因为我必须手动添加项目并选择它们。

希望这个解释很清楚,我相信我只是忽略了一些微不足道的东西。 预先感谢您的帮助!

2个回答

17
如果您希望获取键为attach的列表,请使用request.POST.getlist('attach')。而使用request.POST['attach']仅会给您返回最后一个值,该值是一个字符串。传送门
新年快乐!

0

我再次提到我的老朋友jQuery taconite插件。如果你正在使用AJAX将图像推送到服务器,请尝试返回一个taconite响应,它可以对DOM进行多个更改(将ID放在一个地方,附加一个隐藏的input在其他地方等),还可以运行JS以在页面环境中执行其他操作。非常非常方便。

至于您为多个input字段使用相同名称的情况,我不确定它是否按照您想要的方式工作。使用Firefox的Live HTTP Headers插件,我可以看到传递了foo=1&foo=2&foo=3&foo=4&foo=5&foo=6,但PHP和Django只传递最后一个值,而不是数组。您可以尝试创建类似“attach_1”,“attach_2”等名称,并循环遍历您的POST值并以这种方式获取它们。或者获取原始的POST数据并自己解析。

请参阅elo80ka的答案以了解如何执行此操作。(每天都会学到新东西!)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接