問題タブ [jinja2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
5462 参照

jinja2 - Jinja2 コーディング スタイル / ベスト プラクティス

Jinja2 で開発する際のベスト プラクティスとコーディング スタイルはありますか?

個人的にはPlurk/Solaceのスタイルが気に入っていますが、Jinja2を書くときに他のスタイルやプラクティスがどのようなものか知りたいです。

0 投票する
2 に答える
2160 参照

python - さまざまなブロックにアクセスするJinjaマクロ

Jinja2マクロを呼び出し元のテンプレートの別の部分に出力しようとしています。これを実行したい理由は、マクロの一部としてインラインJavascriptがあるためですが、テンプレートの最後にすべてのJavascriptが必要です。私は基本的にこのようなことをしたい

そしてマクロファイルで

したがって、最終結果は次のようになります。

テンプレートの最後にすべてのJavaScriptが必要ですが、マクロはその場で戻ってくるようです。

私が見逃しているものがありますか、それともこれは標準のJinja2を超えており、拡張機能を作成する必要がありますか?

ありがとう

0 投票する
4 に答える
16279 参照

python - Jinja2のインクルードファイルの先頭にJavaScriptを挿入します

Jinja2では、次のコマンドを実行することで、次のように動作させたいと思います。

基本的に目的は、マクロを使用してすべてのJavaScriptを<head>タグに統合することです。{% call js() %} /* some js */ {% endcall %}


x.html


y.html


期待される結果

jinja2を介してX.htmlを実行すると、結果は次のようになります。


実結果

実際の結果は心強いものではありません。いくつかのタイプの潜在的に照明エラーが発生します。例:

TypeError:マクロ'js'はキーワード引数'caller'を取りません

または、次のような別の基本マクロを追加しようとすると

次の例外が発生します

jinja2.exceptions.TemplateAssertionError:ブロック'head_js'が2回定義されました

blockタグよりもタグの優先順位に関する設計上の問題が発生しているように感じmacroます(つまり、マクロは期待どおりにブロックタグをカプセル化していないようです)。


私の質問は非常に単純だと思います。

  1. Jinja2は私が試みていることを実行できますか?もしそうなら、どのように?

  2. そうでない場合は、この種のパターンをサポートする別のPythonベースのテンプレートエンジン(たとえば、mako、genshiなど)があります。これは、GoogleAppEngineで問題なく動作します。

読んでいただきありがとうございます-私はあなたの入力に感謝します。

ブライアン


編集:

この問題を解決するための拡張機能を作成しようとしています。私は途中です-次のコードを使用しています:

これにより、テンプレートの最後にJavascriptを簡単に追加できます...例:

実行env.get_template('x.html').render()すると、いくつかの明るいコメントと期待される出力が得られます。

もちろん、これは期待どおりにスクリプトを頭に入れることと同じではありませんが、少なくとも1つの場所に簡単に統合できます。

{% include "y.html" %}ただし、 「y.html」にステートメントが含まれている{% js %}場合{% js_content %}、インクルードのステートメントの前にが呼び出されるため、ソリューションは完全ではありません{% js %}(つまり、開始x.html前に完全に解析されy.htmlます)。

また、静的javascriptを持つ定数ノードを挿入する必要がありますが、まだ挿入していませんtry/catch。これは、そこに入れたいことを示しています。これは問題ではありません。

私は進歩を遂げることができてうれしく思います、そして私はインプットに感謝しています。

関連する質問を開きました:インクルード後のJinja2コンパイル拡張機能


編集

解決

jbc完了すると、環境にはすべてのJavascriptを含む変数が含まれます。たとえば、を介してこれを挿入できstring.Templateます。


0 投票する
1 に答える
1003 参照

python - インクルード後のJinja2コンパイル拡張機能

Jinja2では、すべてのステートメントが完了しNodeた後にASTからのレンダリングを行うことは可能ですか?include

これは、より大きなパズルの解決策の重要な部分です。

コード例:

x.py

x.html

y.html

出力は

Xs xesでXをカウントすることはどのように可能y.htmlでしょうか。これは、私が望み、期待する動作です。

言い換えると、_get_x()inから返されたテキストの解析またはフラット化を遅らせる方法はありx.htmlますか?

読んでいただきありがとうございます。

敬具、

ブライアン

0 投票する
1 に答える
405 参照

django - Django:Django + django-registration+jinjaのビューの問題

そこで、jinja2レンダリングを使用するdjangoプロジェクトがあります。また、生活を楽にするためにdjango-registrationをインストールしました。私は次の問題に遭遇しました:

ホームページに行き、jinjaでレンダリングします。認証を確認するには、jinjaの構文user.is_authenticated()を使用する必要があります。ただし、通常のdjangoテンプレートでは、このチェックはuser.is_authenticatedを使用して行われます。通常のdjangoテンプレートに()がある場合、エラーが発生します。

したがって、/ accounts / login /ページに移動すると、django-registration modulは特別なことを何も行わないため、次の方法でURLを標準のdjangoビューに転送します。

だから私は確かにdjango.contrib.authビューを変更するべきではないことを知っていますが、それでは私は自分のビューをどこに置くのですか?myapp / views.pyで?

また、djangoビューをコピーして貼り付けてから、その上で変更する必要がありますか(この場合、renderをrender_jinjaに置き換えるだけです)、またはこの元のdjangoビューを自分のわずかに変更したビューに「拡張」する方法はありますか?ログインするために?

0 投票する
1 に答える
1280 参照

python - Jinja2ASTのサブセクションをコンパイルします

Jinja2 ASTの一部をコンパイルまたは元に戻すことはできますか?

たとえば、テンプレート内から抽出されたノードのリストから、jinja2.environmentまたはそれに相当するものから関数やメソッドを呼び出すことは可能ですか?jinja2.compiler.generate

たとえば、テンプレートが与えられた場合y.html

および拡張機能y.py

実行python y.pyすると、次の期待される出力が得られます。

このparse方法では、次のいずれかを行うことができます。

  1. Unicodeにコンパイルbodyします(つまりtag-content 8); または、代わりに
  2. 元のソースに戻しbodyます(つまりtag-content {{ 3 + 5 }})。

背景として、この質問は2つの以前の質問に関連しています。

  1. インクルード後のJinja2コンパイル拡張機能; と
  2. Jinja2のインクルードファイルの先頭にJavaScriptを挿入します

読んでくれてありがとう。

ブライアン

0 投票する
4 に答える
28129 参照

django - Django:Jinja2に切り替えますか?

いくつかの小さな(500行または600行のテンプレートコード)Djangoサイトがあり、それらをJinja2を使用するように移行したいと思います…しかし、それがどれだけの作業になるかについて、いくつかのアイデアを得たいと思います。それで、一般的に、小さなDjangoサイトをJinja2に移行するのにどれくらいの作業が必要ですか?そして、それは「それだけの価値がある」のでしょうか?

0 投票する
3 に答える
11702 参照

python - jinjaテンプレート内からデフォルトの変数値を定義する正しい方法はありますか?

テンプレート自体の内部でJinjaテンプレートで使用される変数のデフォルト値を設定したいと思います。Jinja2のドキュメントを見ると、これを行う方法がわかりません。私は何かを逃したことがありますか?「デフォルト」フィルターが表示されますが、使用ごとにではなく、値テンプレートを広く設定したいと思います。

私は1時間ほどかけて、拡張タグを作成するためのJinja2拡張機能の作成プロセスについて十分に学ぼうとしましたsetdefault。これは次のようになります。

割り当てられた名前が定義されていない場合、望ましい効果はタグと同等setですが、割り当てられた名前が定義されている場合は効果がありません。私はこれまでこれを機能させることができませんでした。

私の回避策は、jinjaを完全に回避し、複合ファイルを作成することです。特別なマーカーの前の領域はデフォルト値の(yaml)マッピングであり、マーカーの後の領域はjinjaテンプレートです。正常に機能しているように見えるこれの概念実証の実装は次のとおりです。

それで、在庫のJinja2で同等のことを行う方法はありますか、またはどのように拡張機能を記述して目的の効果を達成することができますか?

0 投票する
1 に答える
1085 参照

django - Render_to_response を使用した Mako Jinja2 テンプレートとの Django の統合。問題?

Django を使用して Web プロジェクトを構築しています。mako と Jinja2 テンプレートは Django が提供するテンプレートよりも高速であることがわかっているため、Django の render_to_response メソッドの方法を使用して、mako と Jinja2 を Django に統合する方法を見つけ始めました。多くの研究の後、私はついにこれを実現する方法を見つけました。ただし、私の統合では、jmeter のパフォーマンスは、Jinja2 (3ms) > Django のテンプレート (50ms) > mako (218ms) のようなものです。

何か問題があった場合は?....または、jinja2 と mako を統合するためのベスト プラクティスを教えてください。

以下はコーディングです()

Mako2django.py

Jinja2django.py

view.py は以下のようになります

0 投票する
2 に答える
17107 参照

python - ジンジャのどこに変数を保存しますか?

同じページ レイアウトと構造を持つ 5 つのページがありますが、色やテキストなどが異なるため、テンプレートを作成するのに理想的な環境です。私は Jinja2 とおそらくフラスコを使用することにしました。ドキュメントといくつかのチュートリアルをオンラインで読みましたが、ページ上のテンプレートで何ができるかについて多くのことを説明していますが、変数をページに送信する方法についてはあまり説明していません。

  • ページ固有の変数はどこに保存しますか?
  • コードはどのページがリクエストされ、どの変数をロードするかをどのように知るのでしょうか?