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,而不使用像 <select>
这样可以选择多个项目的表单,因为我必须手动添加项目并选择它们。
希望这个解释很清楚,我确定我只是遗漏了一些微不足道的东西。提前感谢您的帮助!
【问题讨论】:
【参考方案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&foo=2&foo=3&foo=4&foo=5&foo=6
被传递 但 php 和 Django 都只提供最后一个值,而不是数组。您可以尝试创建“attach_1”、“attach_2”等名称,然后循环遍历您的 POST 值并以这种方式将它们吸出。要么获取原始 POST 数据并自己解析。
有关如何执行此操作,请参阅 elo80ka 的答案。 (你每天都在学习一些新东西!)
【讨论】:
以上是关于HTML 表单构建/Django request.POST 帮助的主要内容,如果未能解决你的问题,请参考以下文章
数据访问:Django 表单与 request.POST 方法 [关闭]
使用请求对象访问 django 视图中的 html 表单字段