csv файл не печатает на веб-странице django
0 Dinesh [2018-04-17 11:41:00]
Я новичок в django.I хочу загрузить файл csv, обрабатывать данные и отображать результаты в UI. Для этого я создал следующий код. Проблема в том, что файл csv не загружается. Если я загружу другой формат файла, он не покажет никакого сообщения об ошибке. Также я хочу распечатать данные csv о результатах в пользовательском интерфейсе. views.py
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
<html> <form action="{% url "myapp:upload_csv" %}" method="POST" enctype="multipart/form-data" class="form-horizontal">
{% csrf_token %}
<div class="form-group">
<label for="name" class="col-md-3 col-sm-3 col-xs-12 control-label">File: </label>
<div class="col-md-8">
<input type="file" name="csv_file" id="csv_file" required="True" class="form-control">
</div>
</div>
<div class="form-group">
<div class="col-md-3 col-sm-3 col-xs-12 col-md-offset-3" style="margin-bottom:10px;">
<button class="btn btn-primary"> <span class="glyphicon glyphicon-upload" style="margin-right:5px;"></span>Upload </button>
</div>
</div>
<p><input type="submit" value="Upload" /></p>
{% if c %}
<p> {{c}} <p>
{% endif %}
</form> </html>Также помогите мне распечатать данные csv в пользовательском интерфейсе.
python django
1 ответ
0 HenryM [2018-04-17 11:55:00]
Вам нужно передавать данные в 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>
Здесь может быть пара опечаток, но она должна установить вас в правильном направлении