我有一个包含不同信息的列表。我想打印出来,所以我这样做了:
<tr>
{% for item in aList %}
<td class="dateIndex">
<div>Date: {{item[0]}}</div>
<div>Price: {{item[1]}}</div>
<div>Status: {{item[2]}}</div>
</td>
{% endfor %}
</tr>
问题是所有items
都转到一行,输出如下所示:
Date: 1 200 available
Price:
Status:
当我喜欢它时:
Date: 1
Price: 200
Status: available
任何提示都表示赞赏。
修改 aList包含CSV文件中的项目,如下所示
@app.route('/rent')
def rent():
aList = readFile('static\\dates.csv')
return render_template('rent.html', aList = aList)
def readFile(aFile):
with open(aFile, 'r') as inFile:
reader = csv.reader(inFile)
file = [row for row in reader]
return file
答案 0 :(得分:1)
def readFile(aFile):
with open(aFile, 'r') as inFile:
reader = csv.reader(inFile)
data = [row[0].split('\t') for row in reader]
return data
首先,您不应将file
用作变量名称,以将数据保存为built-in
类型。
>>> file
<type 'file'>
>>>
>>> type(file)
<type 'type'>
其次,如果你在从csv
文件中读取数据时将其拆分而不是在模板上拆分它会更好看起来很丑,如果你得到一些匿名数据会破坏你的模板。
<tr>
{% for item in aList %}
<td class="dateIndex">
<div>Date: {{item.0}}</div>
<div>Price: {{item.1}}</div>
<div>Status: {{item.2}}</div>
</td>
{% endfor %}
</tr>
您应该使用dot
opertator将索引指向模板级别。
答案 1 :(得分:0)
我认为你有两个问题。
首先,您可能需要为每个结果创建一个tr
{% for item in aList %}
<tr>
<td class="dateIndex">
<div>Date: {{item.0}}</div>
<div>Price: {{item.1}}</div>
<div>Status: {{item.2}}</div>
</td>
</tr>
{% endfor %}
其次,您可能会遇到某些浏览器问题,其中div出现在td&#39中。
至少,你应该确保你的div显示为块级元素而不是内联....
答案 2 :(得分:0)
最终找到解决方案。
它将项目保留为列表['1\t200\tavailable']
所以将\ t与.split()
之间的所有内容完全分开
<div>Date: {{item[0].split('\t')[0]}}</div>
<div>Price: {{item[0].split('\t')[1]}}</div>
<div>Status: {{item[0].split('\t')[2]}}</div>