我有一个项目,它接受上传的.csv文件,并通过models.py在管理程序上显示它。我想要做的是在模板上显示这些上传的.csv文件。
我的意见是:
def data_upload(request):
template = "home.html"
if request.method == 'GET':
return render(request, template)
csv_file = request.FILES['file']
if not csv_file.name.endswith('.csv'):
messages.error(request, 'Please upload a .csv file.')
data_set = csv_file.read().decode('ISO-8859-1')
io_string = io.StringIO(data_set)
next(io_string)
for column in csv.reader(io_string, delimiter=','):
_, created = Table.objects.update_or_create(
page=column[0],
keyword=column[1],
interval=column[2],
email=column[3],
notes=column[4],
billing=column[5],
)
context = {
'tables': Table.objects.all()
}
return render(request, template, context)当我上传.csv文件时,视图已经在工作了。
在home.html文件上,我就是这样做的:
<table class="table table-condensed">
<thead>
<tr>
<th>...</th>
</tr>
</thead>
<tbody>
<tr>
<th class="center-align" scope="row"><i class="small material-icons green">check</i></th>
{% for t in tables %}
<td class="center-align">{{t.page}}</td>
<td class="center-align">{{t.keyword}}</td>
<td class="center-align">{{t.interval}}</td>
<td class="center-align">{{t.email}}</td>
<td class="center-align">{{t.notes}} </td>
<td class="center-align">{{t.billing}}</td>
{% endfor %}
</tr>
</table>如何正确地迭代模板以显示我上传到html文件上的内容?
发布于 2019-09-13 08:59:44
如果您不上传一个文件,代码不会超过第一个返回的
除非上传了CSV,否则代码就会停止,因此不会将数据发送到模板。这就是{{ tables }}返回空白的原因。当数据在数据库中时,模板中的{tables}将不会在此呈现中填充。
if request.method == 'GET':
return render(request, template)只有在实际上传CSV的情况下,才能输出任何内容并填写表。任何不是来自大的绿色上传按钮的请求都不会运行代码,这将给模板中的{tables}提供任何数据。
下面的代码只在CSV上传的时候运行。
csv_file = request.FILES['file']
if not csv_file.name.endswith('.csv'):
messages.error(request, 'Please upload a .csv file.')
data_set = csv_file.read().decode('ISO-8859-1')
io_string = io.StringIO(data_set)
next(io_string)
for column in csv.reader(io_string, delimiter=','):
_, created = Table.objects.update_or_create(
page=column[1],
keyword=column[2],
interval=column[3],
email=column[4],
notes=column[5],
billing=column[6],
)
context = {
'tables': Table.objects.all()
}
print(Table.objects.all())
return render(request, template, context)这行得通吗?
context = {'tables': Table.objects.all()}这假设表中的唯一元素是CSV中的元素。
编辑,如何修复模板
改变这个
<tr>
<th class="center-align" scope="row"><i class="small material-icons green">check</i></th>
{% for t in tables %}
<td class="center-align">{{t.page}}</td>
<td class="center-align">{{t.keyword}}</td>
<td class="center-align">{{t.interval}}</td>
<td class="center-align">{{t.email}}</td>
<td class="center-align">{{t.notes}} </td>
<td class="center-align">{{t.billing}}</td>
{% endfor %}
</tr>{% for t in tables %}
<tr>
<th class="center-align" scope="row"><i class="small material-icons green">check</i></th>
<td class="center-align">{{t.page}}</td>
<td class="center-align">{{t.keyword}}</td>
<td class="center-align">{{t.interval}}</td>
<td class="center-align">{{t.email}}</td>
<td class="center-align">{{t.notes}} </td>
<td class="center-align">{{t.billing}}</td>
</tr>
{% endfor %}对此在home.html中
基本上,让<tr></tr>标记进入for循环而不是外部。
https://stackoverflow.com/questions/57920042
复制相似问题