2009-12-31 72 views
5

我不确定我是否仅仅是表单构建受损或者没有考虑正确的方式。我正在尝试构建一个类似于具有AJAX图片上传器的Gmail“撰写”表单的表单。我有一部分代码可以上传图片并返回一个可以正常工作的图片ID。一旦我收到图像ID后,我试图将其附加到隐藏的复选框字段中的表单中。我想允许用户上传多个图像,并且我还想保留所有隐藏的复选框相同的名称,以便我可以轻松地迭代这些值。本质上这:HTML表单构建/ Django request.POST帮助

客户端(这是从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和请求的一个.POST [“attach”]像字符串一样迭代它。我不知道如何解决我的问题,并发送所有图像ID,而无需使用类似<select>的格式,因为我必须手动添加项目并选择它们,因此可以选择多个项目。

希望这个解释很清楚,我相信我只是想念一些微不足道的东西。我在这里先向您的帮助表示感谢!

回答

17

如果你是expecting a list的关键attach,你应该使用request.POST.getlist('attach')。做request.POST['attach']只会给你最后一个值,其中的一个字符串。

新年快乐!

+0

+1:我刚刚学到了一些关于POST的新东西!感谢名单! – 2009-12-31 23:58:16

+0

非常感谢,这正是我一直在寻找的! :) – 2010-01-01 02:48:27

+0

+1:在新的一年在你的电脑 – Sevenearths 2011-11-02 13:42:13

0

我再次指出我的老朋友jQuery taconite plugin。如果您使用AJAX将图像推送到服务器,请尝试返回一个带有多个变化的ta response响应(将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的答案是如何做到这一点。 (雅学习sometin'新的每一天!)