Pythonで一番小さなWebフレームワークと言われているBottle。
このBottleにはSimpleTemplate Engineというテンプレートエンジンがついている
https://bottlepy.org/docs/dev/stpl.html
私は今までこれを使ったことがなかったのだが、先日自身が公開しているbottle-flash2というオープンソースのライブラリでこれに関するissueを頂き、その関係でちょっと触ってみた。
ちなみにそのissueというのがこれ。
(issueに気づくのが遅くなってしまって申し訳ない気持ちだ)
そしてこのissueに関係する形でSimpleTemplate Engineを触ってみたサンプルのリポジトリが下記となる。
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ループの書き方
if
や for
の書き方についても基本的には %
を用いた上で実行すれば良い。
下記もサンプルリポジトリからの引用だが、 %
がついている箇所に注意すれば何をやろうとしているかがわかると思う。
(ただ、SimpleTemplate Engineの書き方としてこれが適しているのかは分からない。公式ページを参照してみるのが正確かもしれない)
% if len(messages) > 0: <div id="flash_messages"> <ul> % for m in messages: <li>{{ m[0] }}</li> % end </ul> </div> % end
なお変数内の値を展開する場合は {{ }}
を利用する。
また、if
や for
を用いた際、 end
で終了させる必要があるようなので、そこも忘れないように注意しておきたい。
以上、SimpleTemplate Engineを用いた際の備忘録となる。