在CGI文件中遍历列表并以HTML格式输出值

1 投票
1 回答
1400 浏览
提问于 2025-04-18 06:14

我在一个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 个回答

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)

其他模板解决方案的做法也非常相似。

撰写回答