flaskでWebアプリ開発、テンプレートについて勉強2

Jinja2テンプレートエンジン、使いこなすと色々と面白そうです。

テンプレートエンジンは色々あるけれど、とりあえずJinja2マスターしてみたいね

flaskのテンプレートについてチュートリアルの勉強を進めています。今回は、Jinja2の「フィルタ」という概念も出てきます。ということで、少しだけフィルタとは何か?という点も、Jinja2に食い込みつつ、勉強を進めていきました。

進めているドキュメントはこちらのページになります。

こんな人の役に立つかも

・flaskを勉強している人

・flaskのテンプレートについて勉強している人

・flaskのアプリを作成している人

目次

標準のフィルタについて

flaskのテンプレートファイルの中では「フィルタ」というJinja2の機能が利用できます。

「フィルタ」は、文字をエスケープしたり、テンプレートに渡された値を、テンプレートで何かしら変換処理を行うような機能です。

日本語、難しいね。実際の例で見るとわかりやすいですね。

Jinja2テンプレートのフィルタ

Jinja2テンプレートエンジンでは、「filter」をテンプレートで利用するときに、次のように利用します。

{{ オブジェクト | フィルター名 }}

このようにオブジェクトとフィルターを「パイプ」で繋ぐことでフィルターを追加することができます。オブジェクトには、フィルターで定義された処理が施されます。

オブジェクトはリストであったり、flaskの「gオブジェクト」であったり、色々取ることができるみたいです。

また、詳細な情報は、Jinja2のドキュメントにJinja2の組み込みフィルター一覧がありましたので、リンクをしておきます。

Jinja2の組み込みフィルタ一覧はこちらです。

Jinja2のドキュメントはこちらです。

あわせて読みたい

Jinja2に標準で搭載されているフィルタに加えて、flaskが用意している次のフィルタが利用できます。

標準のフィルタだけでも色々なものがあるんですね。

tojason()

tojasonは、flaskが準備しているフィルタで、オブジェクトをjson形式に変換してくれるようです。その場でjavascriptを生成しようとしたときに役立つそうです。

<script type=text/javascript>
    doSomethingWith({{ user.username|tojson }});
</script>

「’」(シングルクォーテーション)で囲まれたHTML属性の中でも安全に利用できるとのことです。

<button onclick='doSomethingWith({{ user.username|tojson }})'>
    Click me
</button>

Webアプリを作成して、テンプレートも色々と複雑なことをしたくなったら、役に立ちそうです。

自動エスケープ処理

基本的に、Jinja2やflaskが用意してくれた機能を利用していると、デフォルトでエスケープ処理が施されます。一方で、エスケープが不要な場合があるとのことです。

例えば、もともと、安全なHTMLを生成するシステムから受け取る場合は、エスケープを明示的に外す、という処理が必要になる場合があります。

こんな時は、「autoescape」タグを利用することで一時的にエスケープを無効にすることができるようです。

{% autoescape false %}
    <p>autoescaping is disabled here
    <p>{{ will_not_be_escaped }}
{% endautoescape %}

この項目は、前回の記事にも触りが出てきました。他にも方法がありますが、タグを使う方法だと、シンプルにテンプレート内で明示的に「エスケープしていません」と理解することができて、便利そうです。もちろん、渡すべき文字列の内容は、本当に大丈夫なのか、十分注意しておく必要がありますね。

今回は、概念的な部分ばかりになってしましましたが、次の項目のフィルタをカスタマイズする部分で、実装が少し長くなりそうです。次回は引き続きテンプレートのフィルタについて理解を深めていきたいと思います。フィルタのカスタマイズを具体的に実装したいと思います。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次