我不确定我是不是只是形式受损或没有正确思考这个问题。我正在尝试构建一个类似于Gmail的'compose'表单的表单,该表单具有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_ids和request.POST [“attach”]像字符串一样迭代它。我不确定如何解决我的问题并发送所有图片ID,而不使用表单<select>
之类的内容,因为我必须手动添加项目并选择它们。{/ p>
希望这个解释清楚,我确信我只是遗漏了一些微不足道的东西。感谢您的帮助!
答案 0 :(得分:17)
如果您attach
为密钥request.POST.getlist('attach')
,则应使用request.POST['attach']
。执行{{1}}只会为您提供最后一个值, 是一个字符串。
答案 1 :(得分:0)
我再一次指向我的老朋友jQuery taconite plugin。如果您使用AJAX将图像推送到服务器,请尝试返回一个taconite响应,该响应会进行多项更改(将ID粘贴在一个位置,在其他位置附加隐藏的input
等)到您的DOM。它还可以运行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的答案,了解如何执行此操作。 (雅每天都学习新的东西!)