迭代CGI文件中的列表并在html中打印出值

时间:2014-05-11 23:40:39

标签: python html list loops cgi

我在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

在表格的单元格内

1 个答案:

答案 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)

其他模板解决方案以非常相似的方式做到这一点。