如何从django中的内联表单接收上传的文件?

时间:2010-02-02 13:23:29

标签: python django forms image upload

我正在尝试在django管理面板中创建一个“酷”图像上传界面。问题是我使用内联接口上传图像实例,但我使用jQuery Ajax表单上传图像,因此我需要创建另一种表格进行上传。现在django视图功能无法从此表单接收 request.FILES ,因为我是在不使用 django.forms 的情况下创建的,并且可以在视图函数中指定需要使用哪种形式。因此,我无法覆盖内联接口的标准视图函数,也无法使用 django.forms 重新创建此表单。所以这段代码似乎不起作用:

我的表格:

<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')

也许我应该完全不同的方式?

4 个答案:

答案 0 :(得分:2)

request.FILES应该可以正常使用这种手工制作的形式。除了添加id =“id_file”之外,Django与该字段没有任何不同。我相当肯定你没有身份证不会干扰转移到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>

答案 1 :(得分:0)

我测试了这段代码,文件上传得很好。你能展示你用来构建表单的jquery吗?

感谢。

答案 2 :(得分:0)

我建议使用生成表单的模板片段,但也可以单独生成并发送到jquery。这保留了CSRF令牌,并允许tou用正确的表格解析文件

例如,你会使用:

$.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错误,像对待伪代码一样)

答案 3 :(得分:0)