0

我看了这个问题:

使用 Django 上传多个文件

但这似乎没有帮助,因为我对此有疑问:

  1. 我不想使用 SWF Upload 和 Uploadify 处理 flash 会话,因为我需要进行只有经过身份验证的用户才能进行的上传。
  2. newforms 用于旧版本的 django,我使用的是 1.3

使用 Django,我怎样才能拥有这个 HTML 表单结构:

<form enctype="multipart/form-data" action="." method="post">
 <label for="id_image_1">Image 1</label>
 <input type="file" name="image[]" id="id_image_1" />

 <label for="id_image_2">Image 2</label>
 <input type="file" name="image[]" id="id_image_2" />
</form>

并使用视图处理它?

4

2 回答 2

2

如果您有固定数量的文件字段,您可以简单地定义一个具有足够文件字段的表单,或者以编程方式在表单的构造函数中添加文件字段。请参阅文件上传上的 Django 文档。

如果您想要某种动态功能(la gmail 的“添加另一个文件”),那么您可以使用具有单个文件字段的表单来定义表单集。最初显示一个表单,当您想添加另一个表单时,使用一点 javascript 来生成新表单并更新表单集的管理表单。有许多 片段 可以 帮助您做到这一点,尽管它们可能需要一些调整。请参阅文件上传表单集上的 Django 文档。

另一种选择可能是使用自定义小部件和字段,尽管我没有审查或尝试过。

如果您不知道,name="image[]" 方案是特定于 PHP 的,在其他语言中没有特殊含义,除非您重新实现它。

于 2011-04-05T02:02:49.527 回答
0

newforms 是当前表单在 1.0 之前的名称。此外,如果您的表单经过验证,http://docs.djangoproject.com/en/dev/topics/http/file-uploads/,您将拥有您的文件作为列表(可能是元组,但无论如何都是序列)在 request.FILES['image'] 中,只需执行以下操作:

if request.method == 'POST':
    form = UploadFileForm(request.POST, request.FILES)
    if form.is_valid():
       for f in request.FILES['image']:
           handle_uploaded_file(f)

您必须自己编写 handle_uploaded_file,URL 解释了如何

于 2011-04-05T01:45:12.890 回答