我正在尝试将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>
答案 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>