首页 > 解决方案 > 如何读取 csv 标头

问题描述

所以这是我上传 csv 或 excel 文件的样子。

所以这是我上传 csv 或 excel 文件的样子。所以我的问题是,当使用“上传文件”选择 csv 文件时,我想查看 csv 文件的“标题”并将其显示在“提交”按钮之前,以便用户可以选择他们想要的“标题”。只有在那之后“提交”要上传的 csv 文件。

视图.py

if request.POST and request.FILES:
   csvfile = request.FILES['csv_file']
       if csvfile.name.endswith('.csv'):
          dialect = csv.Sniffer().sniff(csvfile.readline())
          csvfile.open()
          readers = csv.reader(csvfile, delimiter=',',dialect=dialect)
          header=False
          addhosts=set()
          for reader in readers:
            if header is True:
              name=reader[0]
              desc=reader[1]
              value=somemode.objects.create(name=name, desc=desc)
            header=True
       else:
          messages.error(request, "Uploaded file is not .csv" )
return HttpResponseRedirect('/someviews/')

标签: pythondjango

解决方案


所以这是不使用javascript的答案。

firstpopup.html

<div id="form">
    <form action="/someview1/{{id}}" method="POST" enctype="multipart/form-data">
         #file upload part
    </form>   
</div>

secondpopup.html

<div id="form1">
    <form action="/someview2/{{id}}" method="POST" enctype="multipart/form-data">
         #fields submit part
    </form>   
</div>

第一个popop.view

def someview1(request,id):
    args={}
    if request.POST and request.FILES:
        csvfile = request.FILES['csv_file']
        request.session['csv']=csvfile
        if csvfile.name.endswith('.csv'):
            dialect = csv.Sniffer().sniff(csvfile.readline())
            csvfile.open()
            readers= csv.DictReader(csvfile)
            args['fieldnames'] = readers.fieldnames
    return render(request, 'firstpopup.html',args)

secondpopup.views

def someview2(request,id):
    csvfile = request.session['csv']
    title=request.POST['title']
    Desc=request.POST['desc']
    csvfile.open()
    readers= csv.DictReader(csvfile)
    for reader in readers:
        ttl=reader[title]
        desc=reader[Desc]
        name=somemode.objects.create(Title=ttl,Description=desc)
    del request.session['csv']
    return HttpResponseRedirect('/someview3/'+id)


推荐阅读