Jinjaテンプレート使用

4624 ワード

Flaskはデフォルトでjinjaテンプレート言語を使用しています.jinjaの設計ドキュメントはここにあります.
jinjaは、一般的なfor、if...elseなどの便利な関数呼び出しを提供します.例:
<ul id="navigation">
   {% for item in navigation %}
       <li><a href="{{ item.href }}">{{ item.caption }}a>li>
   {% endfor %}
ul>

if文は、変数が空またはfalseとして定義されていないかどうかをテストします.一般的な構文は if else であり、else部分はオプションであり、elifおよびelseを使用して複数のブランチを構築することもできる.
{% if kenny.sick %}
    Kenny is sick.
{% elif kenny.dead %}
    You killed Kenny!  You bastard!!!
{% else %}
    Kenny looks okay --- so far
{% endif %}

公式ドキュメントで与えられたifは、インライン式の例として役立ちます.
{% extends layout_template if layout_template is defined else 'master.html' %}

これは、変数定義の場合にテンプレートが継承されます.そうしないと、デフォルトのレイアウトテンプレートが継承されます.例えば、ログイン前とログイン後に異なるテンプレートを継承すれば、このように実現できます.
次のように使用できます.
{{ '[%s]' % page.title if page.title }}

ここではelseブロックが明示的に提供されず、未定義のオブジェクトが評価されます.
ループフィルタとしても使用できます.
{% for user in users if not user.hidden %}
    <li>{{ user.username|e }}li>
{% endfor %}

もう1つの有用なのはフィルタであり,実際には変数を操作する関数である.フィルタは変数とパイプ記号(|)で分割され、オプションパラメータをカッコで渡すこともできます.複数のフィルタはチェーンで呼び出すことができ、前のフィルタの出力は後のフィルタの入力として使用されます.例:
{{ name|striptags|title }} 

この文は、実際にはnameのすべてのHTMLラベルを削除し、タイトルスタイルの大文字と小文字のフォーマットに書き換えます.具体的には、2つの内蔵フィルタstriptagsとtitleによって実現されます.ここでは、すべての内蔵フィルタを表示できます.
フィルタに加えて、テストを使用して、変数または式をisでテストすることもでき、例えば、名前が定義されているかどうかをテストするためにname is definedを使用することもできる.内蔵のテストリストはこちらです