作りかけのclass HTML
d:id:imait:20090210:1234266258で公開したSessionを簡単に試せるように、HTMLクラスも公開しておきます。これは、HTMLを一々書きたくないから作ってるんですが、"%s"を使った置き換えの方がスマートなんではないかと思ったりしているところ。
最終的には、リストを渡したらul/olリストを、辞書を渡したらdlリストを、また2次元配列でtableを生成するくらいまでやりたいと思うけど、まあそのへんは将来の課題。
以下にソースをのせときます。
# -*- coding: utf-8 -*- ''' Class for assist to make HTML ''' import Cookie class HTML: '''Class to make HTML code.''' def __init__(self, encode='utf-8', lang='en', sitetitle=u'Untitled Site', \ pagetitle=u'Untitled', titledelimiter=u' :: ', \ cssfiles=None, jsfiles=None, cookie=None): self.encode = encode self.lang = lang self.sitetitle = sitetitle self.pagetitle = pagetitle self.titledelimiter = titledelimiter self.cssfiles = cssfiles self.jsfiles = jsfiles self.cookie = cookie # setters def set_encode(self, encode): self.encode = encode def set_lang(self, lang): self.lang = lang def set_site_title(self, sitetitle): self.sitetitle = sitetitle def set_page_title(self, pagetitle): self.pagetitle = pagetitle def set_cookie(self, cookie): self.cookie = cookie # printers def print_resp_header(self): if self.encode == u'' or not isinstance(self.encode, basestring): print(u'Content-Type: text/html') else: print(u'Content-Type: text/html; charset=' + self.encode) if isinstance(self.cookie, Cookie.SimpleCookie): print self.cookie.output() print(u'') def print_html_header(self): dtd = u'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"\n' + \ u'\t"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' print(dtd) print(u'<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="' + \ self.lang + '" lang="' + self.lang + '">') print(u'<head>') print(u'<meta http-equiv="Content-Style-Type" content="text/css" />') print(u'<meta http-equiv="Content-Script-Type" content="text/javascript" />') print(u'<title>' + self.pagetitle + u' ' + self.titledelimiter + \ u' ' + self.sitetitle + u'</title>') if isinstance(self.cssfiles, list): for cssfile in self.cssfiles: print(u'<link rel="stylesheet" type="text/css" href="' + \ cssfile + \ u'" />') elif isinstance(self.cssfiles, basestring): print(u'<link rel="stylesheet" type="text/css" href="' + \ self.cssfiles + \ u'" />') if isinstance(self.jsfiles, list): for jsfile in self.jsfiles: print(u'<script type="text/javascript" src="' + \ jsfile + \ u'"></script>') elif isinstance(self.jsfiles, basestring): print(u'<script type="text/javascript" src="' + \ self.jsfiles + \ u'"></script>') print(u'</head>') print(u'<body>') def print_html_close(self): print(u'</body>\n</html>') # elements def p(self, content, attrs=None): return self._create_element(u'p', content, attrs) def a(self, content, attrs=None): return self._create_element(u'a', content, attrs) def div(self, content, attrs=None): return self._create_element(u'div', content, attrs) # internal methods def _create_start_tag(self, elemname, attrs=None): starttag = u'<' + elemname if isinstance(attrs, dict): for attrname in (attrs.keys()): starttag = starttag + u' ' + attrname + u'="' + \ attrs[attrname] + u'"' starttag = starttag + u'>' return starttag def _create_end_tag(self, elemname): endtag = u'</' + elemname + u'>' return endtag def _create_element(self, elemname, content, attrs=None): starttag = self._create_start_tag(elemname, attrs) endtag = self._create_end_tag(elemname) return starttag + content + endtag