拡張機能¶
Jinjaは、追加のフィルター、テスト、グローバル変数、さらにはパーサーの拡張さえも追加できる拡張機能をサポートしています。拡張機能の主な目的は、よく使用されるコードを再利用可能なクラスに移動することです。たとえば、国際化のサポートを追加するなどです。
拡張機能の追加¶
拡張機能は、Jinja環境の作成時に追加されます。拡張機能を追加するには、拡張クラスまたはインポートパスのリストをEnvironment
コンストラクタのextensions
パラメータに渡します。次の例では、i18n拡張機能がロードされたJinja環境を作成します。
jinja_env = Environment(extensions=['jinja2.ext.i18n'])
作成後に拡張機能を追加するには、add_extension()
メソッドを使用します。
jinja_env.add_extension('jinja2.ext.debug')
i18n 拡張機能¶
インポート名: jinja2.ext.i18n
i18n拡張機能は、gettextまたはBabelと組み合わせて使用できます。有効にすると、Jinjaはブロックを翻訳可能としてマークし、gettext
を呼び出すtrans
ステートメントを提供します。
有効化後、アプリケーションは、グローバルに、またはレンダリング時に、gettext
、ngettext
、およびオプションでpgettext
とnpgettext
の関数を提供する必要があります。_()
関数は、gettext
関数のエイリアスとして追加されます。
環境メソッド¶
拡張機能を有効にすると、環境は次の追加メソッドを提供します。
- jinja2.Environment.install_gettext_translations(translations, newstyle=False)¶
環境全体に翻訳をインストールします。
translations
オブジェクトは、gettext
、ngettext
、およびオプションでpgettext
とnpgettext
を実装する必要があります。gettext.NullTranslations
、gettext.GNUTranslations
、およびBabelのTranslations
がサポートされています。変更履歴
バージョン 3.0 で変更:
pgettext
とnpgettext
を追加しました。バージョン 2.5 で変更: 新しいスタイルのgettextサポートを追加しました。
- jinja2.Environment.install_null_translations(newstyle=False)¶
無操作のgettext関数をインストールします。これは、アプリケーションを国際化に対応させたいが、まだ完全なシステムを実装したくない場合に役立ちます。
変更履歴
バージョン 2.5 で変更: 新しいスタイルのgettextサポートを追加しました。
- jinja2.Environment.install_gettext_callables(gettext, ngettext, newstyle=False, pgettext=None, npgettext=None)¶
指定された
gettext
、ngettext
、pgettext
、およびnpgettext
呼び出し可能オブジェクトを環境にインストールします。これらは、gettext.gettext()
、gettext.ngettext()
、gettext.pgettext()
、およびgettext.npgettext()
とまったく同じように動作する必要があります。newstyle
がアクティブになっている場合、呼び出し可能オブジェクトは新しいスタイルの呼び出し可能オブジェクトのように動作するようにラップされます。詳細については、新しいスタイルの Gettextを参照してください。変更履歴
バージョン 3.0 で変更:
pgettext
とnpgettext
を追加しました。バージョン 2.5 で追加: 新しいスタイルのgettextサポートを追加しました。
- jinja2.Environment.uninstall_gettext_translations()¶
環境にグローバルにインストールされている翻訳をアンインストールします。
- jinja2.Environment.extract_translations(source)¶
指定されたテンプレートノードまたはソースからローカライズ可能な文字列を抽出します。
見つかったすべての文字列について、この関数は
(lineno, function, message)
タプルを生成します。ここで、lineno
は、文字列が見つかった行番号です。function
は、使用されたgettext
関数の名前です(文字列が埋め込みPythonコードから抽出された場合)。message
は、文字列自体、または複数の引数を持つ関数の場合は文字列のタプルです。
複数の言語で利用できるが、すべてのユーザーに同じ言語を提供するWebアプリケーション(たとえば、フランスのコミュニティにインストールされた多言語フォーラムソフトウェア)の場合、環境の作成時に翻訳がインストールされる場合があります。
translations = get_gettext_translations()
env = Environment(extensions=["jinja2.ext.i18n"])
env.install_gettext_translations(translations)
get_gettext_translations
関数は、たとえばgettext.find
を使用して、現在の構成のトランスレータを返します。
テンプレートデザイナー向けのi18n
拡張機能の使い方は、テンプレートドキュメントで説明されています。
空白のトリミング¶
変更履歴
バージョン 2.10 で追加。
{% trans %}
ブロック内では、改行と空白をトリミングして、テキストのブロックが翻訳ファイル内で単一スペースを持つ単純な文字列のように見えるようにすると便利です。
ext.i18n.trimmed
ポリシーを有効にすることで、改行と周囲の空白を自動的にトリミングできます。
新しいスタイルの Gettext¶
変更履歴
バージョン 2.5 で追加。
新しいスタイルのgettext呼び出しは、入力する文字数が少なく、エラーが発生しにくく、自動エスケープをより適切にサポートします。
env.newstyle_gettext = True
を設定するか、newstyle=True
をenv.install_translations
に渡すことで、「新しいスタイル」のgettext呼び出しを使用できます。これらはBabel抽出ツールで完全にサポートされていますが、他の抽出ツールでは期待どおりに動作しない場合があります。
標準のgettext
呼び出しでは、文字列のフォーマットは|format
フィルターを使用して行われる別のステップです。これには、ngettext
呼び出しの作業を重複させる必要があります。
{{ gettext("Hello, World!") }}
{{ gettext("Hello, %(name)s!")|format(name=name) }}
{{ ngettext(
"%(num)d apple", "%(num)d apples", apples|count
)|format(num=apples|count) }}
{{ pgettext("greeting", "Hello, World!") }}
{{ npgettext(
"fruit", "%(num)d apple", "%(num)d apples", apples|count
)|format(num=apples|count) }}
新しいスタイルのgettext
は、フォーマットを呼び出しの一部にし、背後でより一貫性を強制します。
{{ gettext("Hello, World!") }}
{{ gettext("Hello, %(name)s!", name=name) }}
{{ ngettext("%(num)d apple", "%(num)d apples", apples|count) }}
{{ pgettext("greeting", "Hello, World!") }}
{{ npgettext("fruit", "%(num)d apple", "%(num)d apples", apples|count) }}
新しいスタイルのgettextの利点は次のとおりです。
別のフォーマット手順はありません。
|format
フィルターを使用することを覚える必要はありません。名前付きプレースホルダーのみが許可されます。これは、位置プレースホルダーは意味のある位置を切り替えることができないため、翻訳者が直面する一般的な問題を解決します。名前付きプレースホルダーは、どの値がどこに移動するかについてのセマンティック情報を常に持ちます。
プレースホルダーが使用されていない場合でも、文字列のフォーマットが一貫性を保つように、文字列フォーマットが使用されます。生のパーセント記号は、
100%%
のように、%%
としてエスケープしてください。翻訳された文字列は安全とマークされ、フォーマットは必要に応じてエスケープを実行します。既にエスケープされている場合は、パラメータを
|safe
としてマークします。
式ステートメント¶
インポート名: jinja2.ext.do
「do」または式ステートメント拡張機能は、変数式のように機能するが、戻り値を無視する単純な do
タグをテンプレートエンジンに追加します。
ループ制御¶
インポート名: jinja2.ext.loopcontrols
この拡張機能は、ループ内で break
と continue
をサポートします。有効にすると、Jinja は Python とまったく同じように機能するこれらの 2 つのキーワードを提供します。
With ステートメント¶
インポート名: jinja2.ext.with_
変更履歴
バージョン 2.9 で変更: この拡張機能は組み込みになり、何も実行されなくなりました。
自動エスケープ拡張機能¶
インポート名: jinja2.ext.autoescape
変更履歴
バージョン 2.9 で変更: この拡張機能は削除され、組み込みになりました。拡張機能を有効にしても何も実行されなくなりました。
デバッグ拡張機能¶
インポート名: jinja2.ext.debug
現在のコンテキストと、使用可能なフィルターとテストを出力するための {% debug %}
タグを追加します。これは、デバッガーをセットアップせずにテンプレートで使用できるものを確認するのに役立ちます。
拡張機能の作成¶
拡張機能を作成することで、Jinja にカスタムタグを追加できます。これは簡単な作業ではなく、通常はデフォルトのタグと式がすべての一般的なユースケースをカバーしているため、必要ありません。 i18n 拡張機能は、拡張機能が役立つ理由の良い例です。もう 1 つの例は、フラグメントキャッシングです。
拡張機能を作成する際には、Jinja テンプレートコンパイラを使用していることに注意する必要があります。このコンパイラは、渡されたノードツリーを検証しません。 AST の形式が正しくない場合、デバッグが非常に困難なあらゆる種類のコンパイラエラーまたはランタイムエラーが発生します。作成したノードを常に正しく使用していることを確認してください。以下の API ドキュメントは、どのノードが存在し、それらをどのように使用するかを示しています。
拡張機能の例¶
キャッシュ¶
次の例は、cachelib ライブラリを使用して、Jinja の cache
タグを実装しています。
from jinja2 import nodes
from jinja2.ext import Extension
class FragmentCacheExtension(Extension):
# a set of names that trigger the extension.
tags = {"cache"}
def __init__(self, environment):
super().__init__(environment)
# add the defaults to the environment
environment.extend(fragment_cache_prefix="", fragment_cache=None)
def parse(self, parser):
# the first token is the token that started the tag. In our case
# we only listen to ``'cache'`` so this will be a name token with
# `cache` as value. We get the line number so that we can give
# that line number to the nodes we create by hand.
lineno = next(parser.stream).lineno
# now we parse a single expression that is used as cache key.
args = [parser.parse_expression()]
# if there is a comma, the user provided a timeout. If not use
# None as second parameter.
if parser.stream.skip_if("comma"):
args.append(parser.parse_expression())
else:
args.append(nodes.Const(None))
# now we parse the body of the cache block up to `endcache` and
# drop the needle (which would always be `endcache` in that case)
body = parser.parse_statements(["name:endcache"], drop_needle=True)
# now return a `CallBlock` node that calls our _cache_support
# helper method on this extension.
return nodes.CallBlock(
self.call_method("_cache_support", args), [], [], body
).set_lineno(lineno)
def _cache_support(self, name, timeout, caller):
"""Helper callback."""
key = self.environment.fragment_cache_prefix + name
# try to load the block from the cache
# if there is no fragment in the cache, render it and store
# it in the cache.
rv = self.environment.fragment_cache.get(key)
if rv is not None:
return rv
rv = caller()
self.environment.fragment_cache.add(key, rv, timeout)
return rv
そして、環境内でそれを使用する方法は次のとおりです。
from jinja2 import Environment
from cachelib import SimpleCache
env = Environment(extensions=[FragmentCacheExtension])
env.fragment_cache = SimpleCache()
テンプレート内では、ブロックをキャッシュ可能としてマークすることができます。次の例では、サイドバーを 300 秒間キャッシュします。
{% cache 'sidebar', 300 %}
<div class="sidebar">
...
</div>
{% endcache %}
インライン gettext
¶
次の例は、Extension.filter_stream()
を使用して、Jinja ブロックを必要とせずに、静的データとインラインで _()
gettext 関数の呼び出しを解析する方法を示しています。
<h1>_(Welcome)</h1>
<p>_(This is a paragraph)</p>
i18n 拡張機能がロードされ、構成されている必要があります。
import re
from jinja2.exceptions import TemplateSyntaxError
from jinja2.ext import Extension
from jinja2.lexer import count_newlines
from jinja2.lexer import Token
_outside_re = re.compile(r"\\?(gettext|_)\(")
_inside_re = re.compile(r"\\?[()]")
class InlineGettext(Extension):
"""This extension implements support for inline gettext blocks::
<h1>_(Welcome)</h1>
<p>_(This is a paragraph)</p>
Requires the i18n extension to be loaded and configured.
"""
def filter_stream(self, stream):
paren_stack = 0
for token in stream:
if token.type != "data":
yield token
continue
pos = 0
lineno = token.lineno
while True:
if not paren_stack:
match = _outside_re.search(token.value, pos)
else:
match = _inside_re.search(token.value, pos)
if match is None:
break
new_pos = match.start()
if new_pos > pos:
preval = token.value[pos:new_pos]
yield Token(lineno, "data", preval)
lineno += count_newlines(preval)
gtok = match.group()
if gtok[0] == "\\":
yield Token(lineno, "data", gtok[1:])
elif not paren_stack:
yield Token(lineno, "block_begin", None)
yield Token(lineno, "name", "trans")
yield Token(lineno, "block_end", None)
paren_stack = 1
else:
if gtok == "(" or paren_stack > 1:
yield Token(lineno, "data", gtok)
paren_stack += -1 if gtok == ")" else 1
if not paren_stack:
yield Token(lineno, "block_begin", None)
yield Token(lineno, "name", "endtrans")
yield Token(lineno, "block_end", None)
pos = match.end()
if pos < len(token.value):
yield Token(lineno, "data", token.value[pos:])
if paren_stack:
raise TemplateSyntaxError(
"unclosed gettext expression",
token.lineno,
stream.name,
stream.filename,
)
拡張機能 API¶
拡張機能¶
拡張機能は、常に jinja2.ext.Extension
クラスを拡張する必要があります。
- class jinja2.ext.Extension(environment)¶
拡張機能を使用して、パーサーレベルで Jinja テンプレートシステムに特別な機能を追加できます。カスタム拡張機能は環境にバインドされますが、環境固有のデータを
self
に格納することはできません。これは、コピーを作成してenvironment
属性を再割り当てすることにより、拡張機能を別の環境(オーバーレイ用)にバインドできるためです。拡張機能は環境によって作成されるため、構成の引数を受け入れることができません。ファクトリ関数を使用して回避したい場合がありますが、拡張機能はインポート名で識別されるため、これは不可能です。拡張機能を構成する正しい方法は、環境に構成値を格納することです。この方法では、環境が中央構成ストレージとして機能するため、属性が競合する可能性があります。そのため、拡張機能は、構成に選択した名前があまりにも一般的ではないことを確認する必要があります。たとえば、
prefix
はひどい名前ですが、fragment_cache_prefix
は拡張機能の名前(フラグメントキャッシュ)が含まれているため、良い名前です。- パラメータ::
environment (Environment)
- identifier¶
拡張機能の識別子。これは常に拡張クラスの真のインポート名であり、変更してはなりません。
- tags¶
拡張機能がカスタムタグを実装する場合、これは拡張機能がリッスンしているタグ名のセットです。
- preprocess(source, name, filename=None)¶
このメソッドは、実際の字句解析の前に呼び出され、ソースを前処理するために使用できます。
filename
はオプションです。戻り値は、前処理されたソースである必要があります。
- filter_stream(stream)¶
返されるトークンをフィルタリングするために使用できる
TokenStream
が渡されます。このメソッドは、Token
の反復可能オブジェクトを返す必要がありますが、TokenStream
を返す必要はありません。- パラメータ::
stream (TokenStream)
- 戻り値の型:
- parse(parser)¶
tags
のいずれかが一致した場合、このメソッドはパーサーを最初の引数として呼び出されます。パーサストリームが指しているトークンは、一致した名前トークンです。このメソッドは、1 つまたは複数のノードのリストを返す必要があります。
- attr(name, lineno=None)¶
現在の拡張機能の属性ノードを返します。これは、拡張機能の定数を生成されたテンプレートコードに渡すのに役立ちます。
self.attr('_my_attribute', lineno=lineno)
- パラメータ::
- 戻り値の型:
- call_method(name, args=None, kwargs=None, dyn_args=None, dyn_kwargs=None, lineno=None)¶
拡張のメソッドを呼び出します。これは
attr()
+jinja2.nodes.Call
のショートカットです。
パーサー¶
Extension.parse()
に渡されるパーサーは、さまざまなタイプの式を解析する方法を提供します。拡張機能では、以下のメソッドを使用できます。
- class jinja2.parser.Parser(environment, source, name=None, filename=None, state=None)¶
これは、Jinja が使用する中心的な解析クラスです。拡張機能に渡され、式やステートメントの解析に使用できます。
- パラメータ::
environment (Environment) 環境
source (str)
name (str | None)
filename (str | None)
state (str | None) 状態
- filename¶
パーサーが処理するテンプレートのファイル名。これはテンプレートのロード名では**ありません**。ロード名については、
name
を参照してください。ファイルシステムからロードされていないテンプレートの場合、これはNone
です。
- name¶
テンプレートのロード名。
- stream¶
現在の
TokenStream
(トークンストリーム)
- fail(msg, lineno=None, exc=TemplateSyntaxError)¶
メッセージ、渡された行番号または最後の行番号、および現在の名前とファイル名を使用して、
exc
を発生させる便利なメソッド。- パラメータ::
msg (str) メッセージ
lineno (int | None)
exc (Type[TemplateSyntaxError]) 例外タイプ
- 戻り値の型:
te.NoReturn
- free_identifier(lineno=None)¶
新しい freie identifier (自由識別子) を
InternalName
として返します。- パラメータ::
lineno (int | None)
- 戻り値の型:
- parse_statements(end_tokens, drop_needle=False)¶
終了トークンのいずれかに達するまで、複数のステートメントをリストに解析します。これは、適切な場合はテンプレートデータも解析するため、ステートメントの本文を解析するために使用されます。パーサーは、現在のトークンがコロンかどうかを最初にチェックし、コロンがある場合はスキップします。次に、ブロックの終わりをチェックし、
end_tokens
のいずれかに達するまで解析します。デフォルトでは、呼び出しの最後にあるストリームのアクティブトークンは、一致した終了トークンです。これが不要な場合は、drop_needle
をTrue
に設定して、終了トークンを削除できます。
- parse_assign_target(with_tuple=True, name_only=False, extra_end_rules=None, with_namespace=False)¶
代入先を解析します。Jinja はタプルへの代入を許可しているため、この関数は許可されているすべての代入先を解析できます。デフォルトでは、タプルへの代入が解析されますが、
with_tuple
をFalse
に設定することで無効にすることができます。名前への代入のみが必要な場合は、name_only
をTrue
に設定できます。extra_end_rules
パラメーターは、タプル解析関数に転送されます。with_namespace
が有効になっている場合、名前空間の割り当てが解析される場合があります。
- parse_expression(with_condexpr=True)¶
式を解析します。デフォルトではすべての式が解析されます。オプションの
with_condexpr
パラメーターがFalse
に設定されている場合、条件式は解析されません。
- parse_tuple(simplified=False, with_condexpr=True, extra_end_rules=None, explicit_parentheses=False)¶
parse_expression
と同様に動作しますが、複数の式がカンマで区切られている場合、Tuple
ノードが作成されます。カンマが見つからない場合、このメソッドはタプルの代わりに正規表現を返すこともあります。デフォルトの解析モードは完全なタプルです。
simplified
がTrue
の場合、名前とリテラルのみが解析されます。no_condexpr
パラメータはparse_expression()
に転送されます。タプルは区切り文字を必要とせず、無効なカンマで終わることがあるため、タプルの終わりを示す追加のヒントが必要です。たとえば、forループは
for
とin
の間にタプルをサポートします。その場合、extra_end_rules
は['name:in']
に設定されます。explicit_parentheses
は、括弧内の式によって解析がトリガーされた場合に true になります。これは、空のタプルが有効な式かどうかを判断するために使用されます。
- class jinja2.lexer.TokenStream(generator, name, filename)¶
トークンストリームは、
Token
を生成するイテラブルです。しかし、パーサーはそれを反復処理するのではなく、next()
を呼び出して1トークン先に進みます。現在アクティブなトークンはcurrent
として格納されます。- property eos: bool¶
ストリームの終わりですか?
- push(token)¶
トークンをストリームにプッシュして戻します。
- パラメータ::
token (Token)
- 戻り値の型:
なし
- skip(n=1)¶
n個のトークンを進みます。
- パラメータ::
n (int)
- 戻り値の型:
なし
- next_if(expr)¶
トークンテストを実行し、一致した場合にトークンを返します。それ以外の場合、戻り値は
None
です。- パラメータ::
expr (str)
- 戻り値の型:
Token | None
- expect(expr)¶
指定されたトークンタイプを予期し、それを返します。これは
jinja2.lexer.Token.test()
と同じ引数を受け入れます。- パラメータ::
expr (str)
- 戻り値の型:
- class jinja2.lexer.Token(lineno, type, value)¶
- パラメータ::
lineno (int)
type (str)
value (str)
- lineno¶
トークンの行番号
- type¶
トークンのタイプ。この文字列はインターンされているため、
is
演算子を使用して任意の文字列と比較できます。
- value¶
トークンの値。
- test(expr)¶
トークン式に対してトークンをテストします。これは、トークンタイプまたは
'token_type:token_value'
のいずれかになります。これは、文字列値とタイプに対してのみテストできます。- パラメータ::
expr (str)
- 戻り値の型:
また、lexerモジュールには、文字列内の改行文字をカウントできるユーティリティ関数があります
AST¶
AST(抽象構文木)は、解析後にテンプレートを表すために使用されます。これは、コンパイラが実行可能なPythonコードオブジェクトに変換するノードで構成されています。カスタムステートメントを提供する拡張機能は、カスタムPythonコードを実行するためのノードを返すことができます。
以下のリストは、現在利用可能なすべてのノードを示しています。ASTはJinjaのバージョン間で変更される可能性がありますが、下位互換性は維持されます。
詳細については、jinja2.Environment.parse()
の repr を参照してください。
- class jinja2.nodes.Node¶
すべてのJinjaノードの基クラス。さまざまなタイプのノードが利用可能です。4つの主要なタイプがあります
すべてのノードには、フィールドと属性があります。フィールドは、他のノード、リスト、または任意の値にすることができます。フィールドは通常の位置引数としてコンストラクタに渡され、属性はキーワード引数として渡されます。各ノードには、
lineno
(ノードの行番号)とenvironment
の2つの属性があります。environment
属性は、すべてのノードの解析プロセスの最後に自動的に設定されます。- パラメータ::
fields (Any)
attributes (Any)
- iter_fields(exclude=None, only=None)¶
このメソッドは、定義されているすべてのフィールドを反復処理し、
(key, value)
のタプルを生成します。デフォルトではすべてのフィールドが返されますが、only
パラメータを提供することで一部のフィールドに限定したり、exclude
パラメータを使用して一部を除外したりすることができます。どちらもフィールド名の集合またはタプルである必要があります。
- iter_child_nodes(exclude=None, only=None)¶
ノードのすべての子ノードを直接反復処理します。これはすべてのフィールドを反復処理し、ノードであればその値を生成します。フィールドの値がリストの場合、そのリスト内のすべてのノードが返されます。
- find(node_type)¶
指定された型の最初のノードを見つけます。そのようなノードが存在しない場合、戻り値は
None
です。- パラメータ::
node_type (型[_NodeBound])
- 戻り値の型:
_NodeBound | None
- find_all(node_type)¶
指定された型のすべてのノードを見つけます。型がタプルの場合、タプル項目のいずれかに対してチェックが実行されます。
- set_ctx(ctx)¶
ノードとすべての子ノードのコンテキストをリセットします。デフォルトでは、パーサーはすべて「ロード」コンテキストを持つノードを生成します。これは最も一般的なコンテキストだからです。このメソッドは、パーサー内で代入ターゲットや他のノードをストアコンテキストに設定するために使用されます。
- set_lineno(lineno, override=False)¶
ノードと子の行番号を設定します。
- set_environment(environment)¶
すべてのノードの環境を設定します。
- パラメータ::
environment (Environment) 環境
- 戻り値の型:
- class jinja2.nodes.Expr¶
すべての式の基底クラス。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- as_const(eval_ctx=None)¶
式の値を定数として返します。不可能な場合は、
Impossible
を発生させます。EvalContext
を指定できます。指定しない場合は、ノードに環境がアタッチされている必要があるデフォルトコンテキストが作成されます。変更履歴
バージョン 2.4 で変更:
eval_ctx
パラメータが追加されました。- パラメータ::
eval_ctx (EvalContext | None)
- 戻り値の型:
- class jinja2.nodes._FilterTestCommon(node, name, args, kwargs, dyn_args, dyn_kwargs)¶
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Filter(node, name, args, kwargs, dyn_args, dyn_kwargs)¶
式にフィルタを適用します。
name
はフィルタの名前で、他のフィールドはCall
と同じです。node
がNone
の場合、フィルタはフィルタブロックで使用され、ブロックの内容に適用されます。- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Test(node, name, args, kwargs, dyn_args, dyn_kwargs)¶
式にテストを適用します。
name
はテストの名前で、他のフィールドはCall
と同じです。変更履歴
バージョン 3.0 で変更:
as_const
は、フィルタとテストで同じロジックを共有します。テストは、volatile、async、@pass_context
などのデコレータをチェックします。- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.BinExpr(left, right)¶
すべての二項式の基底クラス。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Add(left, right)¶
左ノードと右ノードを加算します。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.And(left, right)¶
短絡評価されるAND。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Div(left, right)¶
左ノードを右ノードで除算します。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.FloorDiv(left, right)¶
左ノードを右ノードで割り、結果を整数に切り捨てて変換します。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Mod(left, right)¶
左を右で割った余りです。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Mul(left, right)¶
左ノードと右ノードを掛け合わせます。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Or(left, right)¶
短絡評価されるORです。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Pow(left, right)¶
左を右のべき乗にします。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Sub(left, right)¶
左ノードから右ノードを減算します。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Call(node, args, kwargs, dyn_args, dyn_kwargs)¶
式を呼び出します。
args
は引数のリスト、kwargs
はキーワード引数のリスト(Keyword
ノードのリスト)、そしてdyn_args
とdyn_kwargs
はNone
か、動的な位置引数(*args
)またはキーワード引数(**kwargs
)として使用されるノードのいずれかでなければなりません。- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Compare(expr, ops)¶
式を他のいくつかの式と比較します。
ops
はOperand
のリストでなければなりません。- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Concat(nodes)¶
提供された式のリストを文字列に変換した後、連結します。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.CondExpr(test, expr1, expr2)¶
条件式(インラインif式)です。 (
{{ foo if bar else baz }}
)- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.ContextReference¶
現在のテンプレートコンテキストを返します。
Name
ノードのように、'load'
コンテキストで使用でき、現在のContext
オブジェクトを返します。現在のテンプレート名を
foo
という変数に代入する例を以下に示します。Assign(Name('foo', ctx='store'), Getattr(ContextReference(), 'name'))
これは基本的に、高レベルAPIを使用する際に
pass_context()
デコレータを使用することと同等です。これにより、コンテキストへの参照が関数の最初の引数として渡されます。- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.DerivedContextReference¶
ローカル変数を含む現在のテンプレートコンテキストを返します。
ContextReference
とまったく同じ動作をしますが、for
ループなどのローカル変数が含まれます。変更履歴
バージョン2.11で追加されました。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.EnvironmentAttribute(name)¶
環境オブジェクトから属性を読み込みます。これは、環境に格納されているコールバックを呼び出したい拡張機能にとって便利です。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.ExtensionAttribute(identifier, name)¶
環境にバインドされている拡張の属性を返します。識別子は
Extension
の識別子です。このノードは通常、拡張の
attr()
メソッドを呼び出すことによって構築されます。- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Getattr(node, attr, ctx)¶
ASCIIのみのバイト文字列である式から属性またはアイテムを取得し、属性を優先します。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Getitem(node, arg, ctx)¶
式から属性またはアイテムを取得し、アイテムを優先します。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.ImportedName(importname)¶
インポート名で作成された場合、ノードアクセス時にインポート名が返されます。たとえば、
ImportedName('cgi.escape')
は、評価時にcgiモジュールからescape
関数を返します。インポートはコンパイラによって最適化されるため、ローカル変数に割り当てる必要はありません。- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.InternalName(name)¶
コンパイラ内部の名前です。これらのノードを自分で作成することはできませんが、パーサーは、新しい識別子を作成する
free_identifier()
メソッドを提供します。この識別子はテンプレートからは使用できず、コンパイラによって特別な扱いを受けません。- ノードタイプ:
- class jinja2.nodes.Const(value)¶
すべての定数値です。パーサーは、
42
や"foo"
のような単純な定数に対してこのノードを返しますが、リストなどのより複雑な値を格納するためにも使用できます。安全な表現を持つ定数のみ(eval(repr(x)) == x
が真であるオブジェクト)です。- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Dict(items)¶
{1: 2, 3: 4}
のような辞書リテラルです。 `items` はPair
ノードのリストでなければなりません。- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.List(items)¶
[1, 2, 3]
のようなリストリテラルです。- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.TemplateData(data)¶
定数テンプレート文字列です。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Tuple(items, ctx)¶
forループのアンパックや、添え字の複数引数などに使われます。
Name
と同様に、`ctx` はタプルが名前のロードまたはストアに使用されるかどうかを指定します。- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.MarkSafe(expr)¶
ラップされた式を安全としてマークします(
Markup
としてラップします)。- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.MarkSafeIfAutoescape(expr)¶
ラップされた式を安全としてマークしますが(
Markup
としてラップします)、自動エスケープがアクティブな場合のみです。変更履歴
バージョン 2.5 で追加。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Name(name, ctx)¶
名前を検索するか、名前に値を格納します。ノードの `ctx` は、次のいずれかの値になります。
store
: 名前に値を格納します。load
: その名前を読み込みます。param
:store
と似ていますが、名前が関数パラメータとして定義されている場合です。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.NSRef(name, attr)¶
名前空間の値の割り当てへの参照です。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Slice(start, stop, step)¶
スライスオブジェクトを表します。これは、
Subscript
の引数としてのみ使用できます。- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.UnaryExpr(node)¶
すべての単項式の基底クラスです。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Pos(node)¶
式を正にします(ほとんどの式では何もしません)。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Keyword(key, value)¶
キーが文字列であるキーワード引数のキーと値のペアです。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Operand(op, expr)¶
演算子と式を保持します。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Pair(key, value)¶
辞書のキーと値のペアです。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Assign(target, node)¶
式をターゲットに割り当てます。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.AssignBlock(target, filter, body)¶
ブロックをターゲットに割り当てます。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Block(name, body, scoped, required)¶
ブロックを表すノードです。
変更履歴
バージョン 3.0.0 で変更: `required` フィールドが追加されました。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.CallBlock(call, args, defaults, body)¶
名前のないマクロのようなもので、代わりに呼び出しを持ちます。 `call` は、このノードが保持する名前のないマクロを `caller` 引数として呼び出されます。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.EvalContextModifier(options)¶
評価コンテキストを変更します。変更する必要がある各オプションについて、
Keyword
をoptions
リストに追加する必要があります。autoescape
設定を変更する例EvalContextModifier(options=[Keyword('autoescape', Const(True))])
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.ScopedEvalContextModifier(options, body)¶
評価コンテキストを変更し、後で元に戻します。
EvalContextModifier
とまったく同じように機能しますが、body
内のノードのEvalContext
のみを変更します。- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.ExprStmt(node)¶
式を評価し、結果を破棄するステートメント。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Extends(template)¶
extends ステートメントを表します。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.FilterBlock(body, filter)¶
フィルターセクションのノード。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.For(target, iter, body, else_, test, recursive)¶
for ループ。
target
は反復のターゲット(通常はName
またはTuple
)、iter
は反復可能オブジェクトです。body
はループ本体として使用されるノードのリスト、else_
はelse
ブロックのノードのリストです。 else ノードが存在しない場合は、空のリストにする必要があります。フィルターノードの場合、式は
test
として格納できます。そうでない場合は、None
です。- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.FromImport(template, names, with_context)¶
from import タグを表すノード。安全でない名前を name 属性に渡さないことが重要です。コンパイラは属性ルックアップを getattr 呼び出しに直接変換し、インターフェースの添え字コールバックを *使用しません*。エクスポートされた変数はダブルアンダースコアで始めることができないため(パーサーはこれをアサートします)、通常の Jinja コードでは問題ありませんが、このノードが拡張機能で使用される場合は、特別な注意が必要です。
エイリアスが必要な場合、名前のリストにタプルを含めることができます。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.If(test, body, elif_, else_)¶
test
が true の場合、body
がレンダリングされます。そうでない場合は、else_
がレンダリングされます。- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Import(template, target, with_context)¶
import タグを表すノード。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Include(template, with_context, ignore_missing)¶
include タグを表すノード。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Macro(name, args, defaults, body)¶
マクロ定義。
name
はマクロの名前、args
は引数のリスト、defaults
はデフォルトがある場合はデフォルトのリストです。body
はマクロ本体のノードのリストです。- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Output(nodes)¶
複数の式を保持し、それらを出力するノード。これは、
print
ステートメントと通常のテンプレートデータの両方で使用されます。- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.OverlayScope(context, body)¶
拡張機能用のオーバーレイスコープ。これは、 largely unoptimized scope ですが、辞書または辞書のようなオブジェクトからサブスコープに完全に任意の変数を導入するために使用できます。
context
フィールドは、辞書オブジェクトに評価される必要があります。使用例
OverlayScope(context=self.call_method('get_context'), body=[...])
変更履歴
バージョン 2.10 で追加。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.With(targets, values, body)¶
with ステートメント専用のノード。 Jinja の古いバージョンでは、with ステートメントは
Scope
ノードのベースで実装されていました。変更履歴
バージョン 2.9.3 で追加されました。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- class jinja2.nodes.Template(body)¶
テンプレートを表すノード。これは、コンパイラに渡される最外部ノードである必要があります。
- ノードタイプ:
- パラメータ::
fields (Any)
attributes (Any)
- exception jinja2.nodes.Impossible¶
ノードが要求されたアクションを実行できなかった場合に発生します。