【问题标题】:html table issue with for-loops带有for循环的html表问题
【发布时间】:2016-06-21 05:27:55
【问题描述】:

我在通过 python 格式化 html 表格时遇到了困难。我正在使用来自先前信息的 for 循环,并且前两列已被格式化,但我很难将某些值放置在正确的位置。

我的代码中确定第二列的部分:

for c in sorted(max_films):
    print "<tr><th>"
    print c
    print "<td>"
    print max_films[c]
    print "</td></tr>"

应该生产第三个

for c in max_list1:
    print "<tr><th>"
    print "<td>"
    print c
    print "</td></tr>"

这是它正在生成的表格:

  • 年度最高票房电影最相似第二最相似第三最相似
  • 2000 第六感
  • 2001 年星球大战:第一集 - 幻影威胁
  • 2002 年哈利波特与魔法石
  • 2003 指环王:两塔
  • 2004 指环王:王者归来
  • 2005 年星球大战:第三集 - 西斯的复仇
  • 2006 年加勒比海盗:亡灵宝箱
  • 2007 年加勒比海盗:世界尽头
  • (空白)完美风暴
  • (空白)人猿星球
  • (空白)指环王:指环王
  • (空白)千与千寻
  • (空白)抵押品
  • (空白)特洛伊
  • (空白)纳尼亚传奇:女巫狮子与魔衣橱
  • (空白)300

电影(Perfect Storm - 300) 应该在第三列而不是在第二列下对齐。我该如何解决这个问题??

完整的html代码:

print "Content-Type: text/html"
print ""
print "<html>"
print "<body>"
print "<table border=1>"

print "<tr>"
print "<th><font color=black>Year</font></th>"
print "<th><font color=blue>Highest Grossing Film</font></th>"
print "<th><font color=red>Most Similar</font></th>"
print "<th><font color=red>2nd Most Similar</font></th>"
print "<th><font color=red>3rd Most Similar</font></th>"
print "<th><font color=red>4th Most Similar</font></th>"
print "</tr>"


for c in sorted(max_films):
    print "<tr><th>"
    print c
    print "<td>"
    print max_films[c]
    print "</td></tr>"


for c in max_list1:
    print "<tr><th>"
    print "<td>"
    print c
    print "</td></tr>"

print "</body>"
print "</html>"

sorted(max_films) = ['2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007']

max_list1 = ['The Perfect Storm', 'Planet of the Apes', 'The Lord of the Rings: The Fellowship of the Ring', 'Spirited Away', 'Collateral', 'Troy', 'The Chronicles of Narnia: The Lion the Witch and the Wardrobe', '300']

【问题讨论】:

  • 您的 HTML 无效(标签不匹配)。
  • 这很烦人。您可以发布完整的代码示例吗?您不应该在两个循环中创建表行。我还看到表头永远不会关闭。此外,我不明白c 包含哪些数据。应该看起来像 for (...) print "&lt;td&gt;data[0]&lt;/td&gt;&lt;td&gt;data[1]&lt;/td&gt; 等。
  • for c in sorted(max_films): print "&lt;tr&gt;&lt;th&gt;" print "&lt;td&gt;c&lt;/td&gt;" print "&lt;td&gt;max_films[c]&lt;/td&gt;" print "&lt;/th&gt;&lt;/tr&gt;" 试试看

标签: python html html-table


【解决方案1】:

错误

  • 您不应将表格行(tr 元素)用于列!
  • 您没有关闭打开的标题(第一个元素)
  • 您应该只在头部使用表头而不是在内容行中!

有效的表结构

    <table>
        <tr>
            <th>Year</th>
            <th>Highest Grossing Film</th>
            <th>Most Similar</th>
            <th>2nd Most Similar</th>
            <th>3rd Most Similar</th>
        </tr>

    <!-- create rows in a loop -->
    <tr>
        <td> ... </td>
        <td> ... </td>
        <td> ... </td>
        <td> ... </td>
        <td> ... </td>
    </tr>
    <!-- loop this ^^ -->

</table>

查看示例:http://jsfiddle.net/n2w5D/

一般解决方案

创建表格时不能循环列,因为需要将一行的所有表格单元格写入一行。表的结构基于行作为父元素而不是列! 您将需要每行的数据来产生如下内容:

print "<table>"

print "<tr>"
    // print your caption row
    print "<th> Year </th>"
    print "<th> Highest Grossing Film </th>"
    print "<th> Most Similar </th>"
    print "<th> 2nd Most Similar </th>"
    print "<th> 3rd Most Similar </th>"
print "</tr>"

// loop data
for row_data in data:
    print "<tr>"

    // print data (maybe: row_data[0] == year, row_data[1] == movie name etc.)
    for cell_data in row_data:
        print "<td>"
        print cell_data
        print "</td>"

    print "</tr>"

print "</table>"

为您的案例提供解决方案

在您发布完整代码后,我认为您的意思不是列,而是行! 我想这就是你想要的:

for c in sorted(max_films):
    print "<tr><td>"
    print max_films[c]
    print "</td>"

for c in max_list1:
    print "<td>"
    print c
    print "</td></tr>"

【讨论】:

    猜你喜欢
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多