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

Posted

技术标签:

【中文标题】HTML 表单构建/Django request.POST 帮助【英文标题】:HTML Form Building / Django request.POST help 【发布时间】:2010-12-31 12:58:51 【问题描述】:

我不确定我是否只是形成了建筑障碍,还是没有以正确的方式思考这个问题。我正在尝试构建一个类似于具有 AJAX 图像上传器的 Gmail 的“撰写”表单的表单。我有一部分代码可以上传图片并返回正常工作的图片 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

不幸的是,我只收到其中一个图片 ID,并且 request.POST["attach"] 像字符串一样对其进行迭代。我不知道如何解决我的问题并发送所有图像 ID,而不使用像 &lt;select&gt; 这样可以选择多个项目的表单,因为我必须手动添加项目并选择它们。

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

【问题讨论】:

【参考方案1】:

如果您的密钥 attach 是 expecting a list,则应使用 request.POST.getlist('attach')。执行request.POST['attach'] 只会给你最后一个值,一个字符串。

新年快乐!

【讨论】:

【参考方案2】:

我将再次指出我的老朋友jQuery taconite plugin。如果您使用 AJAX 将图像推送到服务器,请尝试返回一个 taconite 响应,该响应会进行多项更改(将 ID 粘贴在一个位置,将隐藏的 input 附加到其他位置等)到您的 DOM。它还可以运行 JS 在页面环境中做一些其他的事情。非常非常好用。

至于您对多个 input 字段使用相同的名称,我不确定它是否按您希望的方式工作。使用 Firefox 的 Live HTTP Headers 插件我可以看到 foo=1&amp;foo=2&amp;foo=3&amp;foo=4&amp;foo=5&amp;foo=6 被传递 php 和 Django 都只提供最后一个值,而不是数组。您可以尝试创建“attach_1”、“attach_2”等名称,然后循环遍历您的 POST 值并以这种方式将它们吸出。要么获取原始 POST 数据并自己解析。

有关如何执行此操作,请参阅 elo80ka 的答案。 (你每天都在学习一些新东西!)

【讨论】:

以上是关于HTML 表单构建/Django request.POST 帮助的主要内容,如果未能解决你的问题,请参考以下文章

数据访问:Django 表单与 request.POST 方法 [关闭]

7Python全栈之路系列之Django表单

使用请求对象访问 django 视图中的 html 表单字段

Django之form表单

django:request.POST.get() 返回 NoneType

Django 表单未接收输入