HTML表单构建/ Django request.POST帮助

时间:2009-12-31 23:08:01

标签: html django forms django-forms

我不确定我是不是只是形式受损或没有正确思考这个问题。我正在尝试构建一个类似于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>

希望这个解释清楚,我确信我只是遗漏了一些微不足道的东西。感谢您的帮助!

2 个答案:

答案 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的答案,了解如何执行此操作。 (雅每天都学习新的东西!)