如何从 Django 视图中获取值到 Ajax 成功函数
How to get value from Django view into Ajax success function
我有一个 Django 应用程序,用户可以在其中上传表单提交的文件。上传文件后,程序将从 csv 文件中获取列名并将其显示在 Django 模板中
这是我的看法
def handle_new_file(request):
if (request.method == 'POST'):
form = NewFileForm(request.POST, request.FILES)
if form.is_valid():
csv_file = request.FILES['csv_file']
fs = FileSystemStorage()
file_name = fs.save(csv_file.name, csv_file)
file_url = f"./media/file_uploads/{file_name}"
print(file_name)
print(file_url)
cols = get_column_names(file_url)
form.save()
return HttpResponse(cols)
虽然在表单提交时成功调用了上述视图,但我无法将此 cols
数据传回模板。这是我的 Ajax 代码
function upload(event) {
event.preventDefault();
var data = new FormData($('form').get(0));
$.ajax({
url: $(this).attr('action'),
type: $(this).attr('method'),
data: data,
cache: false,
processData: false,
contentType: false,
success: function (data) {
alert(data);
}
});
return false;
}
$(function () {
$('#new_form').submit(upload);
});
我做错了什么?
您可以使用 JsonResponse
[Django-doc] 将结果 return 作为 JSON blob:
def handle_new_file(request):
if request.method == 'POST':
form = NewFileForm(request.POST, request.FILES)
if form.is_valid():
csv_file = request.FILES['csv_file']
fs = FileSystemStorage()
file_name = fs.save(csv_file.name, csv_file)
file_url = f"./media/file_uploads/{file_name}"
print(file_name)
print(file_url)
cols = get_column_names(file_url)
form.save()
return <strong>JsonResponse({'cols': cols})</strong>
然后在 AJAX 调用中,您可以通过以下方式访问对象:
$.ajax({
# …
success: function (data) {
console.log(<strong>data.cols</strong>);
}
});
当然在现实中您处理 data.cols
,并且可能不会记录列表的内容。
我有一个 Django 应用程序,用户可以在其中上传表单提交的文件。上传文件后,程序将从 csv 文件中获取列名并将其显示在 Django 模板中
这是我的看法
def handle_new_file(request):
if (request.method == 'POST'):
form = NewFileForm(request.POST, request.FILES)
if form.is_valid():
csv_file = request.FILES['csv_file']
fs = FileSystemStorage()
file_name = fs.save(csv_file.name, csv_file)
file_url = f"./media/file_uploads/{file_name}"
print(file_name)
print(file_url)
cols = get_column_names(file_url)
form.save()
return HttpResponse(cols)
虽然在表单提交时成功调用了上述视图,但我无法将此 cols
数据传回模板。这是我的 Ajax 代码
function upload(event) {
event.preventDefault();
var data = new FormData($('form').get(0));
$.ajax({
url: $(this).attr('action'),
type: $(this).attr('method'),
data: data,
cache: false,
processData: false,
contentType: false,
success: function (data) {
alert(data);
}
});
return false;
}
$(function () {
$('#new_form').submit(upload);
});
我做错了什么?
您可以使用 JsonResponse
[Django-doc] 将结果 return 作为 JSON blob:
def handle_new_file(request):
if request.method == 'POST':
form = NewFileForm(request.POST, request.FILES)
if form.is_valid():
csv_file = request.FILES['csv_file']
fs = FileSystemStorage()
file_name = fs.save(csv_file.name, csv_file)
file_url = f"./media/file_uploads/{file_name}"
print(file_name)
print(file_url)
cols = get_column_names(file_url)
form.save()
return <strong>JsonResponse({'cols': cols})</strong>
然后在 AJAX 调用中,您可以通过以下方式访问对象:
$.ajax({
# …
success: function (data) {
console.log(<strong>data.cols</strong>);
}
});
当然在现实中您处理 data.cols
,并且可能不会记录列表的内容。