HTML Tables

Fredrik Lundh fredrik at
Mon Aug 18 23:49:38 CEST 2008

Adrian Smith wrote:

>> Just want to know how to create html tables using a for loop.
>> I need to display 34 html tables, so I figured a for loop will do.
>> Please show me an example of how to do that.
> for i in range(33):

range(33) returns 33 numbers, not 34 (the upper bound is not inclusive).

>     print "<table border>"
>     for j in range(numberofrows-1):

This is also off by one.

>         print "<tr><td>stuff</td><td>stuff</td><td>stuff</td></tr>"
>     print "</table>"

One extra tip: if you're printing arbitrary strings, you need to encode 
them (that is, map &<> to HTML entities, and perhaps also deal with 
non-ASCII characters).  simple ascii-only version:

     from cgi import escape

     print "<tr><td>", escape("stuff"), </td><td>" # etc

(the above inserts extra spaces around the cell contents, but browsers 
don't care about those)

The "escape" function from the cgi module only works for (ascii) 
strings; to be able to escape/encode arbitrary data, you'll need a 
better escape function, e.g. something like:

     import cgi

     def escape(text):
         if isinstance(text, unicode):
             return cgi.escape(text).encode("utf-8")
         elif not isinstance(text, str):
             text = str(text)
         return cgi.escape(text)

The above escapes Unicode strings and encodes them as UTF-8; 8-bit 
strings are escaped as is, and other objects are converted to strings 
before being escaped.

Tweak as necessary.


More information about the Python-list mailing list