QWeb テンプレート¶
QWeb は、Odo2 が使用する主要なテンプレート エンジンです。 これはXMLテンプレートエンジンの[#genshif]_で、主にHTML_フラグメントとページを生成するために使用されます。
テンプレートディレクティブは t-
で始まるXML属性として指定されます。例えば、 :ref:の t-if
は reference/qweb/conditionals
で、要素やその他の属性が直接レンダリングされます。
要素のレンダリングを避けるために、プレースホルダ要素 <t>
も利用できます。 ディレクティブを実行しますが、それ自体の出力は生成されません。
<t t-if="condition">
<p>Test</p>
</t>
will result in:
<p>Test</p>
condition
が true の場合は、
<div t-if="condition">
<p>Test</p>
</div>
will result in:
<div>
<p>Test</p>
</div>
データ出力¶
QWeb の出力ディレクティブ out
は自動的に HTML 入力をエスケープし、ユーザーが提供するコンテンツを表示する際に XSS のリスクを制限します。
out
は式を取り、それを評価し、結果をドキュメントに注入します。
<p><t t-out="value"/></p>
value
に 42
yields`` を設定してレンダリングします。
<p>42</p>
より高度なトピックについては、 高度な出力 を参照してください。
条件¶
QWeb には、属性値として与えられた式を評価する条件付きディレクティブ if
があります:
<div>
<t t-if="condition">
<p>ok</p>
</t>
</div>
条件が true の場合、要素がレンダリングされます。
<div>
<p>ok</p>
</div>
しかし、条件が false の場合、結果から削除されます。
<div>
</div>
条件付きレンダリングはディレクティブのベアラに適用されますが、これは``<t>``:
<div>
<p t-if="condition">ok</p>
</div>
前の例と同じ結果が得られます。
追加の条件分岐ディレクティブ t-elif
と t-else
も利用できます:
<div>
<p t-if="user.birthday == today()">Happy birthday!</p>
<p t-elif="user.login == 'root'">Welcome master!</p>
<p t-else="">Welcome!</p>
</div>
ループ¶
QWeb には反復するコレクションを返す式を foreach
という反復ディレクティブがあります そして 2 番目のパラメータ t-as
で、反復の「現在の項目」に使用する名前を指定します。
<t t-foreach="[1, 2, 3]" t-as="i">
<p><t t-out="i"/></p>
</t>
以下のようにレンダリングされます:
<p>1</p>
<p>2</p>
<p>3</p>
条件と同様に foreach
はディレクティブの属性を持つ要素に適用されます。
<p t-foreach="[1, 2, 3]" t-as="i">
<t t-out="i"/>
</p>
は、前の例と同じです。
foreach
は配列を反復することができます (現在のアイテムは現在の値になります) またはマッピング (現在のアイテムは現在のキーになります)。 整数での反復処理 (0 インクルーシブと与えられた整数排他の間の配列での反復処理と同等) はまだサポートされていますが、非推奨です。
t-as
で渡された名前に加えて、foreach
はさまざまなデータポイントに他の変数を提供します。
警告
$as
は t-as
に渡された名前に置き換えられます
$as_all
(非推奨)繰り返される物体は
注釈
この変数はPythonではなく、JavaScript QWebでのみ使用できます。
$as_value
the current iteration value, identical to
$as
for lists and integers, but for mappings it provides the value (where$as
provides the key)$as_index
現在の反復インデックス (反復の最初の項目はインデックス0)
$as_size
コレクションの大きさが分かれば
$as_first
現在のアイテムがイテレーションの最初であるかどうか(
に相当します。$as_index == 0
)$as_last
現在のアイテムがイテレーションの最後のアイテムであるかどうか ( :samp:`{$as}_index + 1 == {$as}_size`に相当する) はイテレータのサイズが利用可能である必要があります
$as_parity
(非推奨)"even"
または"odd"
のいずれかを選択します。$as_even
(非推奨)現在の反復回数が偶数インデックス上にあることを示す真偽値フラグ。
$as_odd
(非推奨)現在の繰り返し行が奇数インデックス上にあることを示す真偽値フラグ。
これらの追加変数と、 foreach
に作成されたすべての新しい変数は、 foreach
のスコープでのみ使用できます。 変数が foreach
のコンテキスト外に存在する場合、値はforeach の最後にグローバルコンテキストにコピーされます。
<t t-set="existing_variable" t-value="False"/>
<!-- existing_variable now False -->
<p t-foreach="[1, 2, 3]" t-as="i">
<t t-set="existing_variable" t-value="True"/>
<t t-set="new_variable" t-value="True"/>
<!-- existing_variable and new_variable now True -->
</p>
<!-- existing_variable always True -->
<!-- new_variable undefined -->
属性¶
QWeb は、属性をオンザフライで計算し、出力ノードの計算結果を設定することができます。 これは t-att
(attribute) ディレクティブによって3つの異なる形式で行われます。
t-att-$name
「$name」という名前の属性が作成され、属性値が評価され、結果が属性の値として設定されます。
<div t-att-a="42"/>
以下のようにレンダリングされます:
<div a="42"></div>
t-attf-$name
以前と同じですが、パラメータは式の代わりに format string です。 多くの場合、リテラル文字列と非リテラル文字列を混在させるのに役立ちます (e. を選択します。
<t t-foreach="[1, 2, 3]" t-as="item"> <li t-attf-class="row {{ (item_index % 2 === 0) ? 'even' : 'odd' }}"> <t t-out="item"/> </li> </t>
以下のようにレンダリングされます:
<li class="row even">1</li> <li class="row odd">2</li> <li class="row even">3</li>
ちなみに
フォーマット文字列には
"plain_text {{code}}"
(別名jinja-style) と ``"plain_text #{code}"(別名ruby-style)の 2 つの同等の構文があります。t-att=mapping
パラメータがマッピングの場合、各 (キー、値) ペアは新しい属性とその値を生成します。
<div t-att="{'a': 1, 'b': 2}"/>
以下のようにレンダリングされます:
<div a="1" b="2"></div>
t-att=pair
パラメータがペア (タプルまたは 2 要素の配列) の場合。 ペアの最初の項目は属性の名前で、2番目の項目は値です:
<div t-att="['a', 'b']"/>
以下のようにレンダリングされます:
<div a="b"></div>
変数の設定¶
QWeb では、テンプレート内から変数を作成できます。 (複数回使う)計算をメモするために データの断片を明確な名前にして...
これは set
ディレクティブによって行われ、作成する変数の名前を取ります。 設定する値は、以下の2つの方法で指定できます:
式を含む
t-value
属性とその評価結果が設定されます:<t t-set="foo" t-value="2 + 1"/> <t t-out="foo"/>
3
を出力しますt-value
属性がない場合、ノードの本体がレンダリングされ、変数の値として設定されます。<t t-set="foo"> <li>ok</li> </t> <t t-out="foo"/>
サブテンプレートを呼び出し中¶
QWeb テンプレートはトップレベルレンダリングに使用できます。 しかし、t-call
ディレクティブを使用すると、別のテンプレート内からも使用できます。
<t t-call="other-template"/>
other_template
が以下のように定義されている場合、名前付きテンプレートを親の実行コンテキストで呼び出します。
<p><t t-value="var"/></p>
上記の呼び出しは「<p/>」(コンテンツなし)としてレンダリングされますが、:
<t t-set="var" t-value="1"/>
<t t-call="other-template"/>
は``<p>1</p> ``としてレンダリングされます。
しかし、これは t-call
の外側から見えるようにするという問題があります。 代わりに、call
ディレクティブの本文に設定されたコンテンツは、サブテンプレートを呼び出す前に*評価され、ローカルコンテキストを変更することができます。
<t t-call="other-template">
<t t-set="var" t-value="1"/>
</t>
<!-- "var" does not exist here -->
call
ディレクティブの本文は任意に複雑になります (set
ディレクティブだけではありません)。 そして、レンダリングされたフォームは、呼び出されるテンプレート内で魔法の 0
変数として利用可能になります:
<div>
This template was called with content:
<t t-out="0"/>
</div>
thusと呼ばれるのは:
<t t-call="other-template">
<em>content</em>
</t>
will result in:
<div>
This template was called with content:
<em>content</em>
</div>
高度な出力¶
デフォルトでは、out
はエスケープする必要がある HTML エスケープコンテンツを指定し、XSS からシステムを保護します。
エスケープする必要がない*コンテンツは、代わりにドキュメント内にそのまま注入され、ドキュメントの実際のマークアップの一部となる可能性があります。
唯一のクロスプラットフォーム「安全」コンテンツは、 t-call <reference/qweb/call>または :ref:`t-set <reference/qweb/set>`の出力で、「body」と一緒に使用されます (``t-value` または t-value
とは対照的に)。
Python¶
通常はあまり気にする必要はありません。理にかなっているAPIは自動的に「安全な」コンテンツを生成し、物事が透明に動作するはずです。
以下のAPIは、デフォルトでは(再)エスケープされていない安全なコンテンツをテンプレートに挿入しますが、より明確にする必要がある場合には、以下のようにします。
ダブルエスケープを強制する¶
コンテンツが安全としてマークされているが、何らかの理由でエスケープする必要がある場合 (例: HTMLフィールドのマークアップを表示すると、安全フラグeを「削除」するために通常の文字列に戻すことができます。 Pythonでは`str(content)`、Javascriptでは`String(content)`。
注釈
Because Markup
is a much richer type than
Markup()
, some operations will strip the safety information from
a Markup()
but not a Markup
e.g. string
concatenation ('' + content
) in Python will result in a
Markup
with the other operand having been properly
escaped, while in Javascript will yield a String()
where the
other operand was not escaped before the concatenation.
非推奨の出力ディレクティブ¶
esc
out
のエイリアスは、もともと入力をエスケープします。out
とesc
の唯一の違いとして、正式に廃止されていないのは、後者が少し不明瞭/間違っていることです。raw
コンテンツをエスケープしないバージョンの
out
。コンテンツは安全かどうかに関わらずそのまま放出されます。バージョン 15.0 で非推奨: 代わりに
out
をmarkupsafe.Markup
の値で使用します。t-raw
は廃止されました。なぜなら、コードが producting として内容が進化するにつれて、マークアップに使用されることを追跡するのは難しいかもしれないからです。 より複雑なレビューや危険な経過につながります
Python¶
排他的なディレクティブ¶
Asset bundles¶
「スマートレコード」フィールドの書式設定¶
t-field
ディレクティブは、"スマート" レコード(ブラウズ
メソッドの結果)上でフィールドアクセス (a.b
) を行うときにのみ使用できます。 フィールドタイプに基づいて自動的にフォーマットすることができ、ウェブサイトのリッチテキスト編集に統合されています。
t-options
はフィールドをカスタマイズするために使用できます。最も一般的なオプションは widget
で、その他のオプションは field-or widget-dependentです。
デバッグ¶
t-debug
空の値で、 :func:の
breakpoint
組み込み関数を呼び出します。これは通常、デバッガ(デフォルトでは:mod:pdb
)を呼び出します。動作は
PYTHONBREAKPOINT
またはsys.breakpointthook()
で設定できます。
キャッシュのレンダリング:¶
t-cache="key_cache"
タグはレンダリング時にキャッシュされるテンプレートの一部です。すべてのサブディレクティブは最初のレンダリング時にのみ呼び出されます。 これは、これらのサブディレクティブのレンダリング中に除去された sql クエリも 1 回だけ実行されることを意味します。
t-nocache="documentation"
タグは毎回レンダリングされるテンプレートの一部です。コンテンツはルート値のみを使用できます。
なぜ t-cache
を使うのか?¶
このディレクティブは、最終文書の一部をキャッシュすることでレンダリングを高速化するために使用されます。このディレクティブは、データベースへのクエリを保存することができます。 しかし、t-cache
は必然的にテンプレート (例えば t-set
への理解など) を複雑にしますので、慎重に使うべきです。
ただし、実際にデータベースのクエリを保存するには、遅延評価される値でテンプレートをレンダリングする必要がある場合があります。 キャッシュされた部分でこれらの遅延値が使用されている場合、キャッシュで使用可能な部分が評価されません。
t-cache
ディレクティブは、限られたデータ量に依存する値を使用するテンプレート部品に役立ちます。 プロファイラを使ってテンプレートのレンダリングを解析することをお勧めします("Add qweb ディレクティブ context" オプションを有効にする)。 lazy 値をコントローラでレンダリングに渡すと、これらの値を使用してディレクティブを表示し、クエリをトリガーすることができます。
このようなキャッシュを使用することで、異なるユーザーが利用できるようになります(異なるユーザーはキャッシュされたパーツを同じ方法でレンダリングする必要があります)。 もう一つの潜在的な問題は、必要に応じてエントリを無効にすることです。 後者の場合は、キー式 を賢く選んでください。 レコードセットの write_date
を使用すると、キャッシュから明示的に破棄することなくキャッシュキーを期限切れにすることができます。
t-cache
パーツの値がスコープされていることにも注意する必要があります。 これは、このテンプレートに t-set
ディレクティブがある場合に意味します。 t-cache
ディレクティブが存在しない場合と、その後のレンダリングは異なる可能性があります。
t-cache
の中に t-cache
がある場合はどうでしょうか?¶
部品はキャッシュされます。それぞれ、レンダリングに対応する文字列のみを含みます。 したがって、内部の t-cache
はおそらく読み取られる頻度は低く、キャッシュキーが必ずしも使用されるわけではありません。 この場合、t-nocache
を追加する必要があります(同じノードまたは親ノード)。
t-nocache
は何に使われていますか?¶
t-cache
でテンプレートの一部をキャッシュしたいが、小さな部分は動的なままで、キャッシュ時に評価する必要があります。 ただし、t-nocache
の部分はテンプレートの t-set
値にはアクセスできません。 そこにはコントローラが提供する<unk> <unk> の値だけがアクセスできます。 例えば、 メニューは常に同じで、レンダリングに時間がかかるためキャッシュされます(qweb コンテキストのパフォーマンス開発ツールを使用すると調査できます)。 ただし、メニューでは、eコマースカートを常に最新の状態にしておきたいので、この部分を動的に保つために t-nocache
があります。
t-cache
のベース¶
t-cache
ディレクティブを使用すると、レンダリングされたテンプレートの結果を保存できます。 キー式 (例 42: t-cache="42"
) はPython式として評価されます。 これは**キャッシュキー**を生成するために使用されます。したがって、同じテンプレート部分に異なる**キャッシュ値**(キャッシュされたレンダリング部分)があります。 **key expression**がタプルまたはリストの場合、**cache key**を生成するときに検索されます。 **key expression**によって1つ以上のレコードセットが返された場合、モデルが返されます。 idとそれに対応するwrite_dateは**キャッシュキー**の生成に使用されます。 特殊な場合: **key式**がFalsy値を返した場合、コンテンツはキャッシュされません。
例:
<div t-cache="record,bool(condition)">
<span t-if="condition" t-field="record.partner_id.name">
<span t-else="" t-field="record.partner_id" t-options-widget="contact">
</div>
この場合、既に真の条件で返された各レコードに対応するキャッシュに<unk> <unk> (文字列) の値があるかもしれません。 間違った状態にあることを示しています モジュールがレコードを変更した場合、変更された write_date は、キャッシュされた値が破棄されます。
t-cache
とスコープ付き値 (t-set
, t-foreach
...)¶
t-cache
の値はスコープされます。これは親ノードの t-cache
を持っているか持っていないかの間の動作の変更を含みます。 Odooは多くのテンプレート、t-call
や継承を使用していることを考慮することを忘れないでください。 t-cache
を追加すると、編集時に表示されないテンプレートのレンダリングを変更できます。 (t-foreach
は反復ごとに``t-set`` のようです)
例:
<div>
<t t-set="a" t-value="1"/>
<inside>
<t t-set="a" t-value="2"/>
<t t-out="a"/>
</inside>
<outside t-out="a"/>
<t t-set="b" t-value="1"/>
<inside t-cache="True">
<t t-set="b" t-value="2"/>
<t t-out="b"/>
</inside>
<outside t-out="b"/>
</div>
Will render:
<div>
<inside>2</inside>
<outside>2</inside>
<inside>2</inside>
<outside>1</inside>
</div>
t-nocache
のベース¶
t-nocache
属性を持つノードに含まれるテンプレート部分はキャッシュされません。したがって、このコンテンツは 動的 であり、体系的にレンダリングされます。 しかし、使用可能な値はコントローラによって提供される値です (_render
メソッドを呼び出すとき)。
例:
<section>
<article t-cache="record">
<title><t t-out="record.name"/> <i t-nocache="">(views: <t t-out="counter"/>)</i></titlle>
<content t-out="record.description"/>
</article>
</section>
Will render (counter = 1):
<section>
<article>
<title>The record name <i>(views: 1)</i></titlle>
<content>Record description</content>
</article>
</section>
ここでは、コンテナを含む「<i>」タグが常にレンダリングされます。残りはキャッシュ内の単一の文字列として表示されます。
t-nocache
と scoped root 値 (t-set
, t-foreach
...)¶
t-nocache
タグの内容はドキュメントに使用し、ディレクティブが追加される理由を説明することができます。 値は t-nocache
にスコープされます。これらの値はルート値のみです (コントローラによって提供される値および/または irr の ``_render
メソッドを呼び出す場合)。 web``). t-set
はテンプレート部分で実行できますが、他の部分では使用できません。
例:
<section>
<t t-set="counter" t-value="counter * 10"/>
<header t-nocache="">
<t t-set="counter" t-value="counter + 5"/>
(views: <t t-out="counter"/>)
</header>
<article t-cache="record">
<title><t t-out="record.name"/> <i t-nocache="">(views: <t t-out="counter"/>)</i></titlle>
<content t-out="record.description"/>
</article>
<footer>(views: <t t-out="counter"/>)</footer>
</section>
Will render (counter = 1):
<section>
<header>
(views: 6)
</header>
<article>
<title>The record name <i>(views: 1)</i></titlle>
<content>Record description</content>
</article>
<footer>(views: 10)</footer>
</section>
ここでは、コンテナを含む「<i>」タグが常にレンダリングされます。 残りの部分はキャッシュ内の単一文字列ですが、カウンタは t-nocache
から t-set
で更新されません。
t-nocache-*
はキャッシュにプリミティブ値を追加します¶
テンプレートで生成された値を使用できるようにするために、それらをキャッシュすることができます。 ディレクティブは t-nocache-*="expr"
として使用されます。ここで *
は選択された値の名前、Python 式 expr
はキャッシュされます。 キャッシュした値はプリミティブ型でなければなりません。
例:
<section t-cache="records">
<article t-foreach="records" t-as="record">
<header>
<title t-field="record.get_method_title()"/>
</header>
<footer t-nocache="This part has a dynamic counter and must be rendered all the time."
t-nocache-cached_value="record.get_base_counter()">
<span t-out="counter + cached_value"/>
</footer>
</article>
</section>
値 cached_value
は t-cache="records"
のキャッシュテンプレート部分でキャッシュされ、毎回スコープ付きのルート値に追加されます。
Helpers¶
リクエストベース¶
QWebのほとんどのPython側での使用はコントローラ(およびHTTPリクエスト中)です。 この場合、データベースに格納されているテンプレート( views)は、 odooを呼び出すことによって簡単にレンダリングできます。 ttp.HttpRequest.render()
:
response = http.request.render('my-template', {
'context_value': 42
})
これにより自動的に Response
オブジェクトが作成され、コントローラから返されます(または、スーツにさらにカスタマイズされます)。
表示ベース¶
前のヘルパーよりも深いレベルでは、ir'render
メソッドがあります。 web`` (データベースを使用しない) と public module method render
(データベースを使用しない):
- _render(id[, values])¶
QWeb ビュー/テンプレートをデータベース ID または 外部 ID でレンダリングします。テンプレートは
ir.qweb
レコードから自動的に読み込まれます。_prepare_environment
メソッドはレンダリングコンテキストで多くのデフォルト値を設定します。http_routing
とwebsite
アドオンも必要なデフォルト値です。minimal_qcontext=False
オプションを使用すると、public メソッドrender
のようなデフォルト値を避けることができます。request
現在の
Request
オブジェクトがあれば、debug
現在のリクエストが
debug
モードであるかどうかquote_plus
urlエンコードユーティリティ関数
json
対応する標準ライブラリモジュール
時間
対応する標準ライブラリモジュール
datetime
対応する標準ライブラリモジュール
- relativedelta
モジュールを見る
keep_query
keep_query
ヘルパー関数
- パラメータ
values -- レンダリングのために QWeb に渡すコンテキスト値
engine (str) -- レンダリングに使用する Odoo モデルの名前 QWeb をローカルに展開したりカスタマイズしたりするために使用することができます(
ir
に基づいて "new" qweb を作成します)。 web`` alterations)
- render(template_name, values, load, **options)¶
load(ref)()
は、etree オブジェクト ref を返します。
Javascript¶
排他的なディレクティブ¶
テンプレートの定義¶
t-name
ディレクティブはテンプレートファイルのトップレベルにのみ配置できます (ドキュメントルートへの直接の子要素)。
<templates>
<t t-name="template-name">
<!-- template code -->
</t>
</templates>
It takes no other parameter, but can be used with a <t>
element or any
other. With a <t>
element, the <t>
should have a single child.
テンプレート名は任意の文字列ですが、複数のテンプレートが関連している場合(例: (サブテンプレートと呼ばれる)ドット区切りの名前を使って階層的な関係を示すのが慣例です。
テンプレートの継承¶
- テンプレートの継承は以下のいずれかに使用されます:
既存のテンプレートをインプレースで変更します。例えば、テンプレートに情報を追加します。
- 他のモジュールによって作られました
指定された親テンプレートから新しいテンプレートを作成します
- テンプレートの継承は2つのディレクティブを使用して行われます:
継承するテンプレートの名前である ``t-inherited from
継承の動作である
t-継承モード
を使用します。親テンプレートから新しい子テンプレートを作成する場合はprimary
に設定するか、親テンプレートを変更する場合はextension
に設定します。
オプションの t-name
ディレクティブも指定できます。 プライマリモードで使用する場合、新規作成されたテンプレートの名前になります そうでなければ、遺産のリトレースを助けるために変換されたテンプレートへのコメントとして追加されます。
継承自体については、 xpaths ディレクティブを使用して変更を行います。利用可能な命令の完全なセットについては XPATH のドキュメントを参照してください。
プライマリ継承(子テンプレート):
<t t-name="child.template" t-inherit="base.template" t-inherit-mode="primary">
<xpath expr="//ul" position="inside">
<li>new element</li>
</xpath>
</t>
エクステンションの継承(場所変換):
<t t-inherit="base.template" t-inherit-mode="extension">
<xpath expr="//tr[1]" position="after">
<tr><td>new cell</td></tr>
</xpath>
</t>
古い継承機構(非推奨)¶
テンプレートの継承は、パラメータとしてテンプレートの名前を取る``t-extend`` ディレクティブによって行われます。
t-extend
ディレクティブは、t-name
と組み合わせると主要な継承となり、単独で使用する場合は拡張子として動作します。
どちらの場合も、任意の数の t-jquery
サブディレクティブで変更が行われます。
<t t-extend="base.template">
<t t-jquery="ul" t-operation="append">
<li>new element</li>
</t>
</t>
t-jquery
ディレクティブは CSS セレクター を取ります。 このセレクターは拡張テンプレート上で指定された t-operation
が適用される コンテキストノード を選択するために使用されます。
append
ノードの本体はコンテキストノードの末尾に追加されます (コンテキストノードの最後の子の後)
prepend
(コンテキストノードの最初の子ノードの前に挿入される) コンテキストノードのボディの前に追加されます。
before
ノードの本文はコンテキストノードのすぐ前に挿入されます。
after
ノードの本体はコンテキストノードのすぐ後に挿入されます
inner
ノードの本体はコンテキストノードの子要素を置き換えます
replace
ノードの本体はコンテキストノード自体を置き換えるために使用されます
attributes
ノードの本体は任意の数の
attribute
要素でなければなりません。それぞれにname
属性とテキストコンテンツがあります。 コンテキストノードの名前付き属性は指定された値に設定されます (すでに存在する場合に置き換えられるか、ない場合に追加されます)- 操作なし
t-operation
が指定されていない場合、テンプレート本体は javascript コードとして解釈され、コンテキストノードはthis
として実行されます。警告
他の操作よりもはるかに強力ですが、このモードはデバッグとメンテナンスがはるかに困難ですが、それを避けることをお勧めします。
デバッグ¶
javascript QWeb 実装では、いくつかのデバッグ用のフックが用意されています。
t-log
式パラメータを取得し、レンダリング中の式を評価し、結果を
console.log
:: で記録します。<t t-set="foo" t-value="42"/> <t t-log="foo"/>
コンソールに
42
を出力しますt-debug
テンプレートのレンダリング中にデバッガブレークポイントをトリガーする:
<t t-if="a_test"> <t t-debug=""/> </t>
デバッグがアクティブな場合は実行を停止します (正確な条件はブラウザと開発ツールに依存します)
t-js
ノードの本体はテンプレートのレンダリング時に実行される javascript コードです。
context
パラメータを取得します。これはレンダリングコンテキストが``t-js``のbodyで使用できる名前です。<t t-set="foo" t-value="42"/> <t t-js="ctx"> console.log("Foo is", ctx.foo); </t>
Helpers¶
API¶
- class QWeb2.Engine()¶
QWeb "renderer"は、QWebのロジック(テンプレートのロード、パース、コンパイル、レンダリング)のほとんどを処理します。
Odoo Web は、コアモジュール内のユーザーの 1 つをインスタンス化し、それを
core.qweb
にエクスポートします。 また、様々なモジュールのすべてのテンプレートファイルをそのQWebインスタンスにロードします。QWeb2.Engine()
も「テンプレート名前空間」として機能します。- QWeb2.Engine.QWeb2.Engine.render(template[, context])¶
context
(指定されている場合) を使用して、以前にロードされたテンプレートを文字列にレンダリングします。テンプレートのレンダリング時にアクセスされた変数を見つけます (例えば表示する文字列)。- 引数
template (
String()
) -- レンダリングするテンプレートの名前context (
Object()
) -- テンプレートレンダリングに使用する基本的な名前空間
- 戻り値
文字列
エンジンは、場合によっては役に立つかもしれない他のメソッドを公開します (例: 別のテンプレート名前空間が必要な場合、Odoo Webでカンバンビューは独自の:js:class:
QWeb2を取得します。 ngine
インスタンスは、テンプレートがより一般的な「モジュール」テンプレートと衝突しないようにします。- QWeb2.Engine.QWeb2.Engine.add_template(templates)¶
QWeb インスタンス内のテンプレート ファイル (テンプレートのコレクション) を読み込みます。テンプレートは次のように指定できます:
- XML 文字列
QWeb は XML ドキュメントへのパースを試み、ロードします。
- URL
QWeb は URL コンテンツをダウンロードし、結果の XML 文字列をロードしようとします。
Document
またはNode
QWeb はドキュメントの最初のレベル(提供された root の子ノード)を横断し、名前付きテンプレートまたはテンプレートのオーバーライドをロードします。
QWeb2.Engine()
は動作のカスタマイズのために様々な属性を公開します。- QWeb2.Engine.QWeb2.Engine.prefix¶
プレフィックスは解析中にディレクティブを認識するために使用されます。文字列。デフォルトでは
t
です。
- QWeb2.Engine.QWeb2.Engine.debug¶
ブールフラグはエンジンを「デバッグモード」にします。通常、QWebはテンプレートの実行中に発生したエラーをインターセプトします。 デバッグモードでは、すべての例外が傍受されることなく処理されます。
- QWeb2.Engine.QWeb2.Engine.jQuery¶
テンプレートの継承処理中に使用される jQuery インスタンス。デフォルトは
window.jQuery
です。
- QWeb2.Engine.QWeb2.Engine.preprocess_node¶
Function
が存在する場合、各 DOM ノードをテンプレートコードにコンパイルする前に呼び出されます。 Odoo Web では、これはテンプレート内のテキストコンテンツといくつかの属性を自動的に翻訳するために使用されます。デフォルトはnull
です。