HTML-проблема с таблицами for-loop - PullRequest
0 голосов
/ 09 октября 2011

У меня проблемы с форматированием таблицы в html через python. Я использую циклы 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>"

Это таблица, которую он производит:

  • Год Самая высокая Гроссовая пленка Самая похожая 2-я Самая похожая 3-я Самая похожая
  • 2000 Шестое чувство
  • 2001 Звездные войны: Эпизод I - Призрачная угроза
  • 2002 Гарри Поттер и философский камень
  • 2003 Властелин колец: две башни
  • 2004 Властелин колец: возвращение короля
  • 2005 Звездные войны: Эпизод III - Месть ситхов
  • 2006 Пираты Карибского моря: Сундук мертвеца
  • 2007 Пираты Карибского моря: на краю света
  • (пусто) Идеальный шторм
  • (пусто) Планета обезьян
  • (пусто) Властелин колец: Братство Кольца
  • (пусто) Унесенные призраками
  • (пусто) Сопутствующий
  • (пробел) Troy
  • (пусто) Хроники Нарнии: Лев Колдунья и Волшебный Шкаф
  • (пробел) 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']

1 Ответ

0 голосов
/ 09 октября 2011

Ошибка

  • Не следует использовать строки столбцов (элементы tr) для столбцов!
  • Вы не закрываете открытые заголовки (элементы th)
  • Заголовки таблиц следует использовать только в заголовках, а не в строках содержимого!

Допустимая структура таблицы

    <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>"
...