2012-04-15 3 views
1

원하는 HTML을 생성하는 다음 코드가 있습니다. 그러나 그것은 그것을 원하는 곳이 아닌 페이지의 상단에 인쇄합니다.2 차원 목록에서 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) 

는 등 header, footer, 그 잘 작동으로 내 수업 페이지에 다른 기능이 있습니다.

예를 들어, 바닥 글이 div#footer에 제대로 삽입되었습니다. 하지만 {0}이 어디에 생성 테이블 si가 삽입되지 않았습니다.

당신은 당신이없이 인쇄하기 전에 broken code here.

답변

0

당신은 제대로 채워 져야합니다 때문에 직접 인쇄 s의 당신이 변수를 html로 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 

에보기 동안 def output(self): 내부 print를 사용해서는 안 볼 수 있습니다 모든 인쇄판에 stdout

+0

미안하지만, 당신은 숫자 내부의 순서와 형식을 사용할 수 있습니다 , 'world') == "{1} {0}"format ('world', 'Hello')' – Rach

0

중첩 루프는 기본 제공되는 선호하는 결합 방법 인를 사용하는 것과 비교하여 최적이 아닙니다. '안녕하세요'("{0} {1}"형식`:., 다음 코드는 optimal in most cases하고 더 "파이썬"방법을 또한

table = "" 
while i < _list1: 
    table += "<tr><td>{0}</td></tr>".format("</td><td>".join(tup[i])) 
    i += 1 
return table 
관련 문제