サイトをFreeBSD10+python3.3+Bottleで作り直すメモ(3)-とりあえず何か書いてみる

とりあえずお約束のHello, Worldでも。

hello.py:

# -*- coding: utf-8 -*-

from bottle import route, run, SimpleTemplate
from docutils.core import publish_parts

@route('/hello')
def hello():
  rest = '''heading
========'''
  settings = {
    'initial_header_level': 2,
    'doctitle_xform': 0,
  }

  DIR = '/some/where/'
  fp = open(DIR + 'header.tpl')
  header_tpl = SimpleTemplate(fp.read())
  fp.close()
  fp = open(DIR + 'footer.tpl')
  footer_tpl = SimpleTemplate(fp.read())
  fp.close

  tp = ("Hello," , "World!!!")

  return header_tpl.render(title='Hello World') + \
    publish_parts(rest, writer_name='html4css1', \
    settings_overrides=settings)['html_body'] + \
    footer_tpl.render(data=tp)

run(host='localhost', port=8080, debug=True, reloader=True)

/some/where/header.tpl:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<title>{{title}}</title>
</head>
<body>
<h1>{{title}}</h1>
<hr>

/some/where/footer.tpl:

<p>
% for msg in data:
{{msg}}
% end
</p>

</body>
</html>

こういうソースを書いて、hello.pyを実行すると、localhost(うちはjail環境だから本当はlocalhost使えないけど)の8080番ポートで開発用のwebサーバが起動して、http://localhost:8080/helloにアクセスすると、下記のソースでページが表示される。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<title>Hello World</title>
</head>
<body>
<h1>Hello World</h1>
<hr>
<div class="document">
<div class="section" id="id1">
<h2>heading</h2>
</div>
</div>
<p>
Hello,
World!!!
</p>

</body>
</html>

hello.pyの構成はこんな感じ。

  1. Bottleのroute, run ,SimpleTemplateをインポートする

  2. docutilsのpublish_partsもインポートする

  3. @route('/hello')デコレータに続いて関数hello()を記述。関数hello()内では、

    1. 変数restにreST文書を代入

    2. 変数settingsにreST→HTML変換用のパラメータをセットする。

    3. header.tplとfooter.tplからSimpleTemplateクラスのインスタンスheader_tplとfooter_tplを生成。

    4. 関数hello()の返り値として、「header.tpl内の{{title}}を引数title='Hello Worldで置き換えたHTMLコード」「変数restをHTML文書の断片に変換したコード」「『for文で引数tpのタプルの内容を出力する』という構成のfotter.tplから得られるHTMLコード」を結合したテキストを定義。

  4. bottleのrun関数でHTTPサーバを起動。引数debugはテンプレートなりhello.pyのコードにバグがあったときにブラウザにエラー内容を表示する為のフラグで、引数reloaderはhello.pyが書き換わった時に自動的にhello.pyをリスタートさせる為のフラグである。

(2019/11/2追記)これまで publish_partswriter_namehtml4css1 に設定していたが、この設定だとインラインリテラルをTT要素(HTML5では非推奨1)に変換してあまり論理的じゃない。なんで今後は html5 にしたほうがよさそう。

1

なお、B、U、I要素は強調要素の1バリエーションとして残った模様。理不尽だ。

(追記終わり)

コメント(0)


Blog category: Ultima | Adventure games | BSD and Linux | FM TOWNS and Japanese home computers | Computers | Bottle | 広島新球場 | 日本プロ野球 | 広島市民球場跡地とサッカースタジアム | その他スポーツ | Other topics
2002 08 09 10 11 12
2003 01 02 03
2004 01 02 03 04 06 08 09 10 11 12
2005 01 02 03 04 05 06 07 08 09 10 11 12
2006 01 02 03 04 05 06 07 08 09 10 11 12
2007 01 02 03 04 05 06 07 08 09 10 11 12
2008 01 02 03 04 05 06 07 08 09 10 11 12
2009 01 02 04 05 06 07 09 10
2010 01 03 04 05 08 11
2011 01 02 03 04 07 11 12
2012 01 02 03 09 10 11
2013 01 02 03 05 06 07 08 09 10 11 12
2014 01 02 03 04 05 06 07 10 11 12
2015 01 02 03 04 05 07 08 11 12
2016 03 04 05 07 08 09 10 11
2017 06
2018 11 12
2019 01 04 10
2020 05 06 07

Note

本サイトのハイパーリンクの一部は、オリジナルのサイトが閉鎖してしまったため"Internet archive Wayback Machine"へのリンクとなっています。そのようなリンクにはアイコン[archive]を付与しています。

本サイトはCookieを使用しています。本サイトにおけるCookieは以下の三種類のみであり、Cookieの内容に基づいてサイトの表示を変更する以外の用途には用いておりません。