2010-02-02 58 views
6

我想在django管理面板中創建一個「酷」圖片上傳界面。問題是我使用內聯界面來上傳圖像實例,但我使用jQuery Ajax表單來上傳圖片,所以我需要爲上傳創建另一個表單。現在Django的查看功能無法接收request.FILES從這種形式,因爲我創造了它,而無需使用django.forms以及以何種形式需要使用視圖功能無法指定。所以我不能重寫內聯接口的標準視圖函數,並且不能使用django.forms重新創建此表單。因此,這段代碼似乎並不工作:如何從django的內聯表單接收上傳的文件?

我的形式:

<form id="uploadForm" enctype="multipart/form-data" method="post" action="upload_picture/"> 
    <input type="file" name="file" /> 
    <input type="submit" value="Upload" /> 
</form> 

我的看法功能:

def upload_picture(request): 
    if request.method == 'POST': 
     save_original(request.FILES['file']) 
    return HttpResponseRedirect('admin/edit_inline/picture_editor.html') 

也許我應該讓它完全不同的方式?

+1

請注意,HttpResponseRedirect應該使用絕對路徑或完全限定的URL構建,而不是像您的那樣的相對路徑。 HttpResponseRedirect('/ admin/edit_inline/picture_editor.html')應該更好。 – 2011-01-17 08:58:37

回答

0

我測試了這段代碼,文件上傳得很好。你可以顯示你用來構建你的表單的jQuery嗎?

謝謝。

0

我建議使用生成表單的模板片段,但也可以單獨生成併發送給jquery。這PRESERVERS CSRF令牌,並允許土特產品解析與正確

形式,例如文件,你可以使用:

$.ajax({ 
    url: "/uploadPicture?JustForm", 
    dataType: ($.browser.msie) ? "text" : "html", 
    success: function(data){ 
     // Put the form contained in data onto the page (it's a string) 
     $("formContainer").innerHtml(data) 
    } 
}); 

然後有直接通過您的視圖

def upload_picture(request): 
    if request.GET.has_key('JustForm'): 
     return YourFormObject.as_html() <- will include CSRF tags for compat with 1.2 
    if request.method == 'POST': 
     save_original(request.FILES['file']) 
    return HttpResponseRedirect('admin/edit_inline/picture_editor.html') 

(無視返回表單blatent錯誤,對待像僞代碼)

2

request.FILES應該可以正常工作與手工製作的形式。除了添加id =「id_file」外,Django不會執行與該字段不同的任何操作。我相當肯定你沒有一個id不會干擾轉移到request.FILES。

In [5]: from django import forms 

In [6]: class GenericFileForm(forms.Form): 
    ...:   file = forms.FileField() 
    ...: 

In [7]: g = GenericFileForm() 

In [8]: print g 
<tr><th><label for="id_file">File:</label></th><td><input type="file" name="file" id="id_file" /></td></tr> 
相關問題