2011-04-05 119 views
0

我看了看這個問題:Django的 - 多張圖片上傳HTTP

Uploading multiple files with 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> 

和使用視圖處理呢?

回答

2

如果您具有固定數量的文件字段,則可以簡單地定義具有足夠文件字段的表單,或者在表單的構造函數中以編程方式添加文件字段。請參閱File Uploads上的Django文檔。

如果你想要某種動態功能(一拉Gmail的「添加其他文件」),則你可以定義使用形式單一的FileField一個formset。最初顯示單個表單,當您想添加另一個表單時,使用一個小小的JavaScript來生成新表單並更新表單集的管理表單。有一個numberofsnippetsfloating周圍,以幫助你做到這一點,雖然他們可能需要一些調整。請參閱File UploadsFormsets上的Django文檔。

另一種選擇可能是使用custom widget and field,雖然我還沒有審查或嘗試過。

在關閉的機會,你不知道,這個名字=「形象[]」方案是PHP具體,在其他語言沒有特殊的意義,除非你重新實現它。

0

newforms是當前窗體在1.0之前被調用的。此外,如果你有你的表單驗證,http://docs.djangoproject.com/en/dev/topics/http/file-uploads/,你有你的文件的列表(元組,很可能,但無論如何序列)的request.FILES [「形象」],所以才這樣做:

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說明如何使用