django在循环时只显示最后一行

时间:2018-04-05 17:33:18

标签: django csv line

我正在尝试将csv文件上传到文件系统并在html中显示而不存储在数据库中。 下面的代码工作正常......

我在下面添加了一行代码;

messages.add_message(request, messages.INFO, line)

这样我就可以跟随行变量了。我可以看到代码循环所有csv文件

def check_fp(request):
        if not request.user.is_active:
            return render(request, 'login.html')
        else:
            if request.method == 'POST' and request.FILES['csv_file2']:
                myfile = request.FILES['csv_file2']
                fs = FileSystemStorage()
                filename = fs.save(myfile.name, myfile)
                data = csv.reader(fs.open(filename, mode='r'))
                for row in data:
                    if row[0] != 'FP_Item':
                        line = row[0]
                        messages.add_message(request, messages.INFO, line)
                context = {'line': line}
                return render(request, 'check_fp.html', context)
            return render(request, 'check_fp.html', {})

但是我只能在html文件中看到csv文件的最后一行。这是我在html文件中的循环。为什么我没有看到所有?

     <tbody><tr> <td width="25%><a href="#">
 {% for line in line %} {{ line }} {% endfor %} </a></td><td>

1 个答案:

答案 0 :(得分:3)

您的行变量赋值和上下文添加不在同一范围内,并且您没有构建要迭代的列表。您需要将您的行添加到列表中并循环遍历模板中的行。

您应该构建类似于以下行的列表:

def check_fp(request):
    if not request.user.is_active:
        return render(request, 'login.html')
    else:
        if request.method == 'POST' and request.FILES['csv_file2']:
            myfile = request.FILES['csv_file2']
            fs = FileSystemStorage()
            filename = fs.save(myfile.name, myfile)
            data = csv.reader(fs.open(filename, mode='r'))
            lines = []  # Added
            for row in data:
                if row[0] != 'FP_Item':
                    line = row[0]
                    lines.append(line)  # Added
                    messages.add_message(request, messages.INFO, line)
            context = {'lines': lines}  # Modified
            return render(request, 'check_fp.html', context)
        return render(request, 'check_fp.html', {})

循环遍历行列表以在模板中构建表格:

<tbody>
  {% for line in lines %}
  <tr>
    <td width="25%><a href="#">{{ line }}</a></td>
  </tr>
  {% endfor %}
</tbody>