2014-05-11 111 views
1

打印出值I有兩個列表中一個CGI文件:迭代通過一個CGI文件的列表,並在HTML

數= [0,1,2,3]

字母= [A, B,C,d]

如何通過這些名單迭代和HTML打印值出

我的理想我的表是這樣的:

1乙

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) 

但這真的不是通過列表迭代時,我只知道列表的大小,也做了 必要的代碼吧。另外這只是打印出局:

一個

一個表格的單元格內

回答

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) 

其他模板解決方案以非常相似的方式做到這一點。

+0

這真是太棒了! – Sweety