【问题标题】:csv file is not printing in django webpagecsv 文件未在 django 网页中打印
【发布时间】:2018-09-27 03:35:50
【问题描述】:

我是 django 的新手。我想上传 csv 文件,处理数据并将结果呈现在 UI 上。为此,我创建了以下代码。 问题是 csv 文件没有上传。如果我上传了其他文件格式,它不会显示任何错误消息。 我还想在 UI 上打印 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 数据

【问题讨论】:

  • 您似乎根本没有将文件传递给模板。

标签: python django


【解决方案1】:

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

这里可能有几个错别字,但它应该会让你朝着正确的方向前进

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-03
    • 2019-07-15
    • 2018-01-28
    • 1970-01-01
    • 2010-10-22
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多