Python django网页中未打印csv文件
我是django新手。我想上传csv文件,处理数据并在UI上呈现结果。为此,我创建了以下代码。 问题是csv文件未上载。如果我上传了其他文件格式,它不会显示任何错误消息。 此外,我想打印csv数据的结果在用户界面上。 视图.pyPython django网页中未打印csv文件,python,django,Python,Django,我是django新手。我想上传csv文件,处理数据并在UI上呈现结果。为此,我创建了以下代码。 问题是csv文件未上载。如果我上传了其他文件格式,它不会显示任何错误消息。 此外,我想打印csv数据的结果在用户界面上。 视图.py from django.shortcuts import render from django.conf import settings from django.http import HttpResponseRedirect from django.contri
from django.shortcuts import render
from django.conf import settings
from django.http import HttpResponseRedirect
from django.contrib import messages
import csv
from django.core.urlresolvers import reverse
import logging
def upload_csv(request):
data = {}
if "GET" == request.method:
return render(request, "myapp/upload_csv.html", data)
# if not GET, then proceed
try:
csv_file = request.FILES["csv_file"]
if not csv_file.name.endswith('.csv'):
c=messages.error(request,'File is not CSV type')
return HttpResponseRedirect(reverse("myapp:upload_csv",{"c":c}))
#if file is too large, return
if csv_file.multiple_chunks():
messages.error(request,"Uploaded file is too big (%.2f MB)." % (csv_file.size/(1000*1000),))
return HttpResponseRedirect(reverse("myapp:upload_csv"))
file_data = csv_file.read().decode("utf-8")
lines = file_data.split("\n")
#loop over the lines and save them in db. If error , store as string and then display
for line in lines:
fields = line.split(",")
data_dict = {}
data_dict["GSTIN/UIN"] = fields[0]
data_dict["start_date_time"] = fields[1]
data_dict["end_date_time"] = fields[2]
data_dict["notes"] = fields[3]
try:
form = EventsForm(data_dict)
if form.is_valid():
form.save()
else:
logging.getLogger("error_logger").error(form.errors.as_json())
except Exception as e:
logging.getLogger("error_logger").error(repr(e))
pass
except Exception as e:
logging.getLogger("error_logger").error("Unable to upload file. "+repr(e))
messages.error(request,"Unable to upload file. "+repr(e))
#return HttpResponseRedirect(reverse("myapp:index",data_dict))
return HttpResponseRedirect("myapp/upload_csv.html")
html
{%csrf_令牌%}
文件:
上传
{%if c%}
{{c}}
{%endif%}
您需要通过上下文向html文件传递数据。你需要修改你的代码,比如
rows = []
lines = file_data.split("\n")
#loop over the lines and save them in db. If error , store as string and then display
for line in lines:
fields = line.split(",")
data_dict = {}
data_dict["GSTIN/UIN"] = fields[0]
data_dict["start_date_time"] = fields[1]
data_dict["end_date_time"] = fields[2]
data_dict["notes"] = fields[3]
try:
form = EventsForm(data_dict)
if form.is_valid():
form.save()
else:
logging.getLogger("error_logger").error(form.errors.as_json())
except Exception as e:
logging.getLogger("error_logger").error(repr(e))
pass
rows.append(line)
except Exception as e:
logging.getLogger("error_logger").error("Unable to upload file. "+repr(e))
messages.error(request,"Unable to upload file. "+repr(e))
variables = {}
variables['lines'] = rows
#return HttpResponseRedirect(reverse("myapp:index",data_dict))
return render(request,"myapp/upload_csv.html", variables)
然后在html文件中
<table>
{% for line in lines %}
<tr><td>{{ line.0 }}</td><td>{{ line.1 }}</td></tr>
{% endfor %}
</table>
{第%行中的第%行}
{{line.0}{{line.1}
{%endfor%}
这里可能有几处输入错误,但它应该会让您朝着正确的方向前进您似乎根本没有将文件传递给模板。