拡張機能¶
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¶
- ノードが要求されたアクションを実行できなかった場合に発生します。 
