繁体   English   中英

CSV文件未在Django页面中打印

[英]csv file is not printing in django webpage

我是django的新手,我想上传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> 

还可以帮助我在UI上打印CSV数据

您需要通过上下文将数据传递到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>

这里可能会有一些错别字,但它应该为您设定正确的方向

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM