Jinjaテンプレート使用
4624 ワード
Flaskはデフォルトでjinjaテンプレート言語を使用しています.jinjaの設計ドキュメントはここにあります.
jinjaは、一般的なfor、if...elseなどの便利な関数呼び出しを提供します.例:
if文は、変数が空またはfalseとして定義されていないかどうかをテストします.一般的な構文は
公式ドキュメントで与えられたifは、インライン式の例として役立ちます.
これは、変数定義の場合にテンプレートが継承されます.そうしないと、デフォルトのレイアウトテンプレートが継承されます.例えば、ログイン前とログイン後に異なるテンプレートを継承すれば、このように実現できます.
次のように使用できます.
ここではelseブロックが明示的に提供されず、未定義のオブジェクトが評価されます.
ループフィルタとしても使用できます.
もう1つの有用なのはフィルタであり,実際には変数を操作する関数である.フィルタは変数とパイプ記号(|)で分割され、オプションパラメータをカッコで渡すこともできます.複数のフィルタはチェーンで呼び出すことができ、前のフィルタの出力は後のフィルタの入力として使用されます.例:
この文は、実際にはnameのすべてのHTMLラベルを削除し、タイトルスタイルの大文字と小文字のフォーマットに書き換えます.具体的には、2つの内蔵フィルタstriptagsとtitleによって実現されます.ここでは、すべての内蔵フィルタを表示できます.
フィルタに加えて、テストを使用して、変数または式を
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
を使用することもできる.内蔵のテストリストはこちらです