【问题标题】:Post file using jquery in Django在 Django 中使用 jquery 发布文件
【发布时间】:2014-05-28 12:49:27
【问题描述】:

我想使用 jquery 将 csv 文件发布到 django 视图

<form  id="form" enctype="multipart/form-data" >
<input type="file" name="ListFile" id="ListFile" />
<button type="button" onclick="csv_send">upload</button>
</form><br>


js是:

function csv_send(){
var data = {
'csrfmiddlewaretoken' : $('input[name=csrfmiddlewaretoken]').val(),
'data': $("#ListFile").val()
}
/*$.ajax({
  type: 'POST',
  url:'/list/create/',
  cache:false,
  dataType:'json',
  data:data,
  success: function(result) {
     console.log("ok")
    }
 });*/
}


django views.py:

def createlist(request):
    if request.method == 'POST':
        file =  request.FILES


这里没有获取文件。
我知道使用表单操作获取文件。但是在这里我想通过 javascript 发布文件,因为我想在成功后回复 javascript。 显然,我希望通过 request.FILES 在views.py 中找到该文件

【问题讨论】:

  • 你缺少表单的参数enctype="multipart/form-data"
  • @yedpodtrzitko 现在也打印 request.FILES['ListName'] 给出
  • 嗯...问题是您无法通过 AJAX 上传文件。你必须使用 iframe(我有一些为此目的的库:github.com/yedpodtrzitko/ajax-uploader
  • 其实这个问题在这里得到了回答:stackoverflow.com/questions/5392344/…
  • @yedpodtrzitko 使用表单操作作为 url

标签: javascript jquery python html django


【解决方案1】:

上传文件时,你的表单必须有这个属性:

enctype='multipart/form-data'

像这样:

<form  id="form" enctype='multipart/form-data'>

This might help you understand.

【讨论】:

  • 然后也打印 request.FILES 给出
【解决方案2】:

您必须使用 FormData 对象和基本 ajax 帖子的略微修改版本:

    var data = new FormData();
    var file = null;

    //when uploading a file take the file
    $("#your-file-input-id").on("change", function(){
        file = this.files[0]
    });

    //append the file in the data
    data.append("file", file);

    //append other data
    data.append("message", "some content");

    $.ajax({
        url: '/path',
        type: 'POST',
        data: data,
        contentType: false,
        processData: false,
        success: function (data, status, xhr) {
            //handle success            },
        error: function (data, status, xhr) {
            //handle error
        }

    });

在 Django 中,您会在 request.FILES['file'] 中找到该文件。 我希望这是有帮助的。

【讨论】:

    猜你喜欢
    • 2012-11-08
    • 2012-08-02
    • 1970-01-01
    • 2017-07-08
    • 2017-12-26
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 2012-09-26
    相关资源
    最近更新 更多