Putting in an html table

Discussion in 'Python' started by Little, Dec 4, 2005.

  1. Little

    Little Guest

    Could someone start me on putting in a table into this code, and some
    HTML tags. I would to make the table below the map and have a header at
    the top. Thanks for the help.

    """ Publisher example """

    def query(req, building=""):
    # NOTE: best way to understand this is to see the output,
    # that is, to "view source" on the generated web page
    # read common header for any google mapping
    f = file('/home/ta/public_html/maplish/googleHead.html','r')
    t = f.read()
    f.close()
    # define the two buildings we know (because no SQL is done here)
    buildings = [ ("cb", "Cambus Office", "-91.552977", "41.659655")
    ]
    buildings += [ ("va/hardlib", "VA/Hardin Library", "-91.549501",
    "41.662348") ]
    buildings += [ ("hancher", "Hancher Auditorium", "-91.538214",
    "41.669529") ]
    buildings += [ ("currier", "Currier Hall", "-91.534996",
    "41.666163") ]
    buildings += [ ("schaeffer", "Schaeffer Hall", "-91.535296",
    "41.660969") ]
    buildings += [ ("shospital", "South Hospital", "-91.548900",
    "41.658885") ]
    str = '' # in case no buildings match, use empty string
    for x in buildings:
    a,b,c,d = x # isolate all the tuple components into a,b,c,d
    if building.lower() == a:
    # construct javascript, using Python %s to substitute names
    and data
    # see http://docs.python.org/lib/typesseq-strings.html if
    needed
    str = 'var bldg%s = new GPoint( %s, %s);\n' % (a, c, d)
    str += 'var mrk%s = new GMarker( bldg%s );\n' % (a, a)
    str += 'var htm%s = "%s";\n' % (a, b)
    str += 'GEvent.addListener(mrk%s,"click",function() {' % a
    str += 'mrk%s.openInfoWindowHtml(htm%s); });\n' % (a, a)
    str += 'map.addOverlay(mrk%s);\n' % a
    # output markers, if any
    t = t + str
    # then add trailing html to finish page
    trail = "//]]> </script> </body> </html>"
    t = t + trail
    return t
     
    Little, Dec 4, 2005
    #1
    1. Advertising

  2. Little wrote:
    > Could someone start me on putting in a table into this code, and some
    > HTML tags. I would to make the table below the map and have a header at
    > the top. Thanks for the help.
    >
    > """ Publisher example """
    >
    > def query(req, building=""):
    > # NOTE: best way to understand this is to see the output,
    > # that is, to "view source" on the generated web page
    > # read common header for any google mapping
    > f = file('/home/ta/public_html/maplish/googleHead.html','r')


    Never hardcode a path.

    > t = f.read()
    > f.close()
    > # define the two buildings we know (because no SQL is done here)
    > buildings = [ ("cb", "Cambus Office", "-91.552977", "41.659655")
    > ]
    > buildings += [ ("va/hardlib", "VA/Hardin Library", "-91.549501",
    > "41.662348") ]
    > buildings += [ ("hancher", "Hancher Auditorium", "-91.538214",
    > "41.669529") ]
    > buildings += [ ("currier", "Currier Hall", "-91.534996",
    > "41.666163") ]
    > buildings += [ ("schaeffer", "Schaeffer Hall", "-91.535296",
    > "41.660969") ]
    > buildings += [ ("shospital", "South Hospital", "-91.548900",
    > "41.658885") ]


    # avoid useless operations
    buildings = [
    ("cb", "Cambus Office", "-91.552977", "41.659655"),
    ("va/hardlib", "VA/Hardin Library", "-91.549501", "41.662348"),
    ("hancher", "Hancher Auditorium", "-91.538214", "41.669529"),
    ("currier", "Currier Hall", "-91.534996", "41.666163") ,
    ("schaeffer", "Schaeffer Hall", "-91.535296", "41.660969"),
    ("shospital", "South Hospital", "-91.548900", "41.658885")
    ]


    > str = '' # in case no buildings match, use empty string

    # don't use 'str' as an identifier, it will shadow the builtin str type.


    > for x in buildings:
    > a,b,c,d = x # isolate all the tuple components into a,b,c,d
    > if building.lower() == a:


    If what you want is to find the building matching the one given as
    argument, you should build a dict, not a list of tuples.

    buildings = {
    "cb" : ("Cambus Office", "-91.552977", "41.659655"),
    "va/hardlib" : ("VA/Hardin Library", "-91.549501", "41.662348"),
    "hancher" : ("Hancher Auditorium", "-91.538214", "41.669529"),
    "currier" : ("Currier Hall", "-91.534996", "41.666163") ,
    "schaeffer" : ("Schaeffer Hall", "-91.535296", "41.660969"),
    "shospital" : ("South Hospital", "-91.548900", "41.658885")
    }

    Now you don't need to loop and compare, a simple :
    buildings.get(building.lower())
    should be enough

    (NB : Anyway, this dict should not be hardcoded. Put this in a separate
    conf file, in a db, or whatever, but keep it out of the code.)


    > # construct javascript, using Python %s to substitute names
    > and data
    > # see http://docs.python.org/lib/typesseq-strings.html if
    > needed
    > str = 'var bldg%s = new GPoint( %s, %s);\n' % (a, c, d)
    > str += 'var mrk%s = new GMarker( bldg%s );\n' % (a, a)
    > str += 'var htm%s = "%s";\n' % (a, b)
    > str += 'GEvent.addListener(mrk%s,"click",function() {' % a
    > str += 'mrk%s.openInfoWindowHtml(htm%s); });\n' % (a, a)
    > str += 'map.addOverlay(mrk%s);\n' % a


    string concatenation is not an efficient idiom. In a loop, the common
    idiom is to use a list and join it, but here I guess a triple quoted
    string and simple templating trick would be better.


    > # output markers, if any
    > t = t + str
    > # then add trailing html to finish page
    > trail = "//]]> </script> </body> </html>"
    > t = t + trail
    > return t


    This is definitevely not how I would do HTML/js in Python. There are a
    lot of templating / HTML generation tools available, that allow to
    cleanly separate logic from presentation.

    --
    bruno desthuilliers
    python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
    p in ''.split('@')])"
     
    bruno at modulix, Dec 5, 2005
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. John Lau
    Replies:
    4
    Views:
    668
    John Lau
    May 5, 2004
  2. Ed West
    Replies:
    1
    Views:
    906
    Steve Willcock
    Aug 9, 2004
  3. Saurabh
    Replies:
    6
    Views:
    4,551
    Chris Smith
    May 30, 2004
  4. Adrienne
    Replies:
    5
    Views:
    586
    Jacqui or (maybe) Pete
    Jul 18, 2003
  5. patrick j
    Replies:
    23
    Views:
    683
    dorayme
    Nov 3, 2006
Loading...

Share This Page