我在cgi文件中有两个列表:
数字= [0,1,2,3]
字母= [A,B,C,D]
如何遍历这些列表并在html中打印出值
理想情况下,我的桌子看起来像这样:
0 A
1 B
2 C
3 D
等等。
这意味着表和行必须由我的列表的长度和数量来决定 我有的清单。因此,我还需要知道如何遍历列表并创建 当我遍历列表时,在html脚本中的表。
到目前为止我已经这样做了:
print'''
<html>
<head>
</head>
<body>
<center>
<table border="0" cellspacing="15">
<tr>
<td align="center" style="font-size:1.25em;">
<p class="sansserif"> <b> Number: %d </b> <br>
Letter: %s </p>
</td>
</tr>
</table>
</center>
</body>
</html>'''%(Number, Letter)
但这实际上并没有遍历列表,我只知道列表大小并且已经完成了 必要的代码。这也就是打印出来的:
0
A
在表格的单元格内
答案 0 :(得分:1)
有两个选项
您按%
创建结果内容的尝试正朝着这个方向发展。
但是,由于存在循环(输出中的行),并且%
和string.format
都不支持循环,因此您必须在代码中创建此“循环内容”并最终嵌入结果页面。
bigtempl = '''<html>
<head>
</head>
<body>
<center>
<table border="0" cellspacing="15">
{rows}
</table>
</center>
</body>
</html>'''
rowtempl = """
<tr>
<td align="center" style="font-size:1.25em;">
<p class="sansserif"> <b> Number: {number:d} </b> <br>
Letter: {letter} </p>
</td>
</tr>
"""
numbers = [0, 1, 2, 3]
letters = ["A", "B", "C", "D"]
lst = zip(numbers, letters)
rows = [rowtempl.format(number=number, letter=letter) for number, letter in lst]
rows = "".join(rows)
wholepage = bigtempl.format(rows=rows)
print wholepage
有许多软件包,允许根据模板和数据结构生成内容。这些通常允许循环。
我曾经决定继续使用jinja2
,我很满意。你的任务在Jinja2中是这样的:
import jinja2
templ = '''<html>
<head>
</head>
<body>
<center>
<table border="0" cellspacing="15">
{% for number, letter in lst %}
<tr>
<td align="center" style="font-size:1.25em;">
<p class="sansserif"> <b> Number: {{number}} </b> <br>
Letter: {{letter}} </p>
</td>
</tr>
{% endfor %}
</table>
</center>
</body>
</html>'''
numbers = [0, 1, 2, 3]
letters = ["A", "B", "C", "D"]
lst = zip(numbers, letters)
template = jinja2.Template(templ)
print template.render(lst=lst)
其他模板解决方案以非常相似的方式做到这一点。