Pythonで開発開始、名前はまだない
一昨日いっていた話の続き。職場で使うシステムをPythonで作ると決めて、そして実際に書き始めました。といっても、まだ全然進んでいなくて、HTMLの出力に役立つクラスを書き始めたところです。
こんな感じ:
# -*- coding: utf-8 -*- ''' Class for assist to make HTML ''' 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): self.encode = encode self.lang = lang self.sitetitle = sitetitle self.pagetitle = pagetitle self.titledelimiter = titledelimiter self.cssfiles = cssfiles self.jsfiles = jsfiles # 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 print_resp_header(self): if self.encode == '': print(u'Content-Type: text/html\n') else: print(u'Content-Type: text/html; charset=' + self.encode + u'\n') # printers 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
参考にしたのは、Perlで広く使われているモジュール、CGI.pm(日本語訳)で、これとPython標準のモジュールであるcgiを組み合わせようと思っています。
クラスやモジュール、変数等の名前は、PEP 8 -- Style Guide for Python Codeを参考にしています。クラスの名前も、最初はHTMLPrinterだったのだけど、managerとかが入ってくると要注意とのアドバイスを見たので、心を鬼にしてPrinterを落としました。
それが正しい選択かどうかはわかんない。
最終的にどう決着するかはわからないけど、このクラスは使い回しが利くよう、今作ろうとしているシステムの色がつかないようにしたいと思っています。なるたけ柔軟に使える、なるたけ標準的なXHTMLを出力するものができればいいけど、まああんまり最初から気負わないように、気楽に作っていくつもりです。