at backyard

Color my life with the chaos of trouble.

Pythonの小さなWebフレームワークBottleについているSimpleTemplate Engineを試してみた

Pythonで一番小さなWebフレームワークと言われているBottle。
このBottleにはSimpleTemplate Engineというテンプレートエンジンがついている

https://bottlepy.org/docs/dev/stpl.html

私は今までこれを使ったことがなかったのだが、先日自身が公開しているbottle-flash2というオープンソースのライブラリでこれに関するissueを頂き、その関係でちょっと触ってみた。

ちなみにそのissueというのがこれ。
(issueに気づくのが遅くなってしまって申し訳ない気持ちだ)

github.com

そしてこのissueに関係する形でSimpleTemplate Engineを触ってみたサンプルのリポジトリが下記となる。

github.com

SimpleTemplate Engineを用いた書き方(変数の代入, if, forループ)

SimpleTemplate Engineの使い方について一番上に貼ったドキュメントを見ればよいのだが、ドキュメントはなかなか簡素な形なので、備忘録として上のリポジトリでも利用しているSimpleTemplate Engineの書き方についてメモしておこうと思う。

SimpleTemplate Engineを用いた際の、変数の代入

ちなみにSimpleTemplate Engineを用いて、HTMLにPythonコードを埋め込む際は % を用いる。

下記はSimpleTemplate Engineのドキュメントから引用。 このように <%%> で囲むと、複数行のPythonコードが記載できる。

% name = "Bob"  # a line of python code
<p>Some plain text in between</p>
<%
  # A block of python code
  name = name.title().strip()
%>
<p>More plain text</p>

下は上に貼った自身で作成したサンプルリポジトリで用いている書き方だが、このようにすると messages という変数に値が代入される。
(app.get_flashed_messages()という関数は bottle-flash2 側で実装されている関数である。)

% messages = app.get_flashed_messages()

以上のように関数の実行なども当然できるので、サーバ側から渡ってきた関数を元に何かをするということもできる。

SimpleTemplate Engineを用いた際のif文やforループの書き方

iffor の書き方についても基本的には % を用いた上で実行すれば良い。

下記もサンプルリポジトリからの引用だが、 % がついている箇所に注意すれば何をやろうとしているかがわかると思う。
(ただ、SimpleTemplate Engineの書き方としてこれが適しているのかは分からない。公式ページを参照してみるのが正確かもしれない)

% if len(messages) > 0:
    <div id="flash_messages">
    <ul>
    % for m in messages:
        <li>{{ m[0] }}</li>
    % end
    </ul>
    </div>
 % end

なお変数内の値を展開する場合は {{ }} を利用する。

また、iffor を用いた際、 end で終了させる必要があるようなので、そこも忘れないように注意しておきたい。

以上、SimpleTemplate Engineを用いた際の備忘録となる。