1

我有以下代码可以生成所需的 HTML。但它打印在页面顶部,而不是我想要的位置。

def fixText(self,text):
    row = []
    z = text.find(',')

    if z == 0: row.append('')
    else:      row.append(text[:z])

    for x in range(len(text)):
        if text[x] != ',': pass
        else:
            if x == (len(text)-1): row.append('')
            else:
                if ',' in text[(x+1):]:
                    y = text.find(',', (x+1))
                    c = text[(x+1):y]
                else:
                    c = text[(x+1):]
                    row.append(c)
    return row

def output(self):
    output = ""
    fob=open('files/contacts.txt','r')
    tup = []

    while 1:
        text = fob.readline()

        if text == "": break
        else: pass

        if text[-1] == '\n':
            text = text[:-1]
        else: pass

        row = self.fixText(text)
        tup.append(row)

    output = tup.sort(key=lambda x: x[0].lower())

    _list1 = len(tup)
    i = 0
    table = ""

    while i < _list1:
        j = 0 #need to reset j on each iteration of i
        _list2 = len(tup[i])
        print("<tr>")

        while j < _list2:
            print("<td>" + tup[i][j] + "</td>")
            j += 1

        print("</tr>")
        i += 1

    return output

如您所见,我有一个打印出 HTML 代码的嵌套循环。这很好用,但是当我尝试将它注入我的模块化站点时,它会在页面顶部打印它。我的预感是以下代码是我需要更改的部分。

#!/usr/local/bin/python3

print('Content-type: text/html\n')

import os, sys
import cgitb; cgitb.enable()

sys.path.append("classes")

from Pagedata import Pagedata
Page = Pagedata()

print(Page.doctype())
print(Page.head())
print(Page.title("View Contact"))
print(Page.css())

html='''</head>
<body>
<div id="wrapper">
    <div id="header">
        <div id="textcontainer">{1}</div>
    </div>
    <div id="nav">{2}</div>
    <div id="content">
        <h2>Heading</h2>
        <h3>Sub Heading Page 2</h3>
        <table>
            <tbody>
                {0}
            </tbody>
        </table>    
    </div>
<div>
<div id="footer">{3}</div>
</body>
</html>'''.format(Page.output(),Page.header(),Page.nav(),Page.footer())

print(html)

我的课程页面上还有其他功能,例如headerfooter等,可以正常工作。

例如,页脚已正确插入到div#footer. 但是生成的表 si 没有插入 where{0}是。

您可以在此处查看损坏的代码。

4

2 回答 2

0

您不应该print在内部使用,def output(self):因为它在外观期间直接打印sys.stdout

table = ""
while i < _list1:
    j = 0#need to reset j on each iteration of i
    _list2 = len(tup[i])
    table += "<tr>"
    while j < _list2:
        table=+"<td>" + tup[i][j] + "</td>"
        j += 1
    table += "</tr>"
    i += 1
return table

您的 html 变量应该在打印之前正确填充,而不需要任何打印stdout

于 2012-04-15T20:21:01.520 回答
0

与加入列表的内置首选方法(即使用)相比,嵌套循环不是最佳的.join(),以下代码在大多数情况下是最佳的,也是更“pythonic”的方式

table = ""
while i < _list1:
    table += "<tr><td>{0}</td></tr>".format("</td><td>".join(tup[i]))
    i += 1
return table
于 2014-07-28T10:44:42.823 回答