Django - HTTP上传多个图像

时间:2011-04-05 01:22:38

标签: django django-forms django-uploads

我看了这个问题:

Uploading multiple files with Django

但是由于我遇到了问题,它似乎没有帮助:

  1. 我不想使用SWF上传和上传来处理Flash会话,因为我需要进行只有经过身份验证的用户才能进行的上传。
  2. newforms适用于旧版本的django,我使用的是1.3
  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>
    

    并使用视图处理它?<​​/ p>

2 个答案:

答案 0 :(得分:2)

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

如果您想要某种动态功能(la gmail的“添加另一个文件”),那么您可以使用具有单个文件字段的表单来定义表单集。最初显示单个表单,当您想要添加另一个表单时,使用一些小的javascript来生成新表单并更新formset的管理表单。有number of snippets floating可以帮助您完成此操作,但可能需要进行一些调整。请参阅File UploadsFormsets上的Django文档。

另一种选择可能是使用custom widget and field,但我没有审核或试过这个。

在您不知道的机会中,name =“image []”方案是特定于PHP的,除非您重新实现,否则在其他语言中没有特殊含义。

答案 1 :(得分: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解释了如何