【发布时间】:2014-01-16 08:26:45
【问题描述】:
我已经尝试上传一个简单的文本文件几个小时了,但我似乎仍然无法正常工作。
我不断收到无效的表单,说我缺少“file_source”。
为什么“file_source”没有发布?
我也让它实际发送“file_source”,但它仍然说它丢失了。应该为 Django FileFiled 赋予什么类型的元素?
Django 表单:
class FileUploadForm(forms.Form):
file_source = forms.FileField()
Django 模板(呈现表单):
<form action="/upload/" method="post" id="file-upload-form" enctype="multipart/form-data"> {% csrf_token %}
{{ form }}
<button type="submit" class="btn btn-primary" id='upload-btn'>Upload</button>
</form>
JQuery/Ajax 上传:
function uploadFile() {
$.ajax({
data: $(this).serialize(),
type: $(this).attr('method'),
url: $(this).attr('action')
});
return false;
}
$(function() {
$('#file-upload-form').submit(uploadFile);
});
Django 查看收到 POST 的内容:
def upload_view(request):
if request.is_ajax():
form = FileUploadForm(request.POST)
if form.is_valid():
print 'valid form'
else:
print 'invalid form'
print form.errors
return HttpResponseRedirect('/ingest/')
【问题讨论】:
-
你必须使用FormData或者flash或者Iframes来发送文件,我推荐使用FormData看这个答案stackoverflow.com/questions/20715606/post-data-using-ajax-post/…
-
@Nicolas 类似但不一样。我需要一种让 Django 正确解释 ajax 帖子的方法。
标签: jquery ajax django django-forms