The previous example is extended to greet several friends.
import crawdad class HelloFriendsDoc (crawdad.HtmlDocument): def __init__ (self, friendList): self.friends = friendList crawdad.HtmlDocument.__init__ (self) def mainBody (self): helloList = self.UL () for aFriend in self.friends: helloList.append (self.helloFriend (aFriend)) return helloList def helloFriend (self, aFriend): return self.LI ("Hello " + aFriend)
To generate the HTML, create a HelloFriendsDoc object with a list of friends (Bob, Carol, ...) and call its printHtml method.
>>> friends = ["Bob", "Carol", "Ted", "Alice"] >>> doc = HelloFriendsDoc (friends) >>> doc.printHtml () <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML><HEAD><TITLE>Untitled document</TITLE> </HEAD> <BODY><UL><LI>Hello Bob</LI> <LI>Hello Carol</LI> <LI>Hello Ted</LI> <LI>Hello Alice</LI> </UL> </BODY> </HTML>
The resulting HTML is complete and correctly nested.
Crawdad starts new lines after tags like
</HEAD>
and </LI>
to aid visual inspection.
The mainBody method returns a <UL>
(unordered list)
that contains a <LI>
(list item) for each friend.
The UL and LI methods generate HtmlElement
objects for the respective HTML tags.
The helloList initially has no content, but
<LI>
HtmlElement objects are appended one-by-one.
The helloFriend method creates
these <LI>
HtmlElement objects with some
initial text content.
Most HtmlElement objects can contain other HtmlElement
objects or text.
For example, a <P>
HtmlElement object could contain
some text, a <B>
object (with its own content), and more text.
HtmlElement objects can be initialized empty or with content.
Additional content can be prepended to the front of a content list or
appended to the end.
HtmlElement's content flexibility allows a simplification of
the mainBody method.
Python's map function applies the helloFriend method to each
friend and returns a list of <LI>
objects.
The <UL>
is initialized with this content and returned
as the main body of the document.
def mainBody (self): return self.UL (map (self.helloFriend, self.friends))