私は Mako と Genshi のどちらかを選択していますが、テンプレート ソリューションを検討しています。Genshi のテンプレートは少し見苦しいので、Mako に移行しています。
私は疑問に思いました: Mako が組み込み Python コードを許可するという事実の何がそんなに良いのでしょうか? 平均的なジョーにとってどのように便利ですか?
Pythonコードを埋め込まなくても、テンプレート化だけで十分ではないでしょうか?
私は Mako と Genshi のどちらかを選択していますが、テンプレート ソリューションを検討しています。Genshi のテンプレートは少し見苦しいので、Mako に移行しています。
私は疑問に思いました: Mako が組み込み Python コードを許可するという事実の何がそんなに良いのでしょうか? 平均的なジョーにとってどのように便利ですか?
Pythonコードを埋め込まなくても、テンプレート化だけで十分ではないでしょうか?
mako のホームページで指摘されているように、Mako の利点は非常に明確です。非常に高速で、構文と機能の両方の点で Python に慣れている人なら誰でもすぐに慣れることができます。
Genshi は、事前の Python コード生成の代わりに「解釈」を選択し (彼らのFAQによると、それはエラー メッセージを明確にするためです)、Python への「腕の長さ」アプローチ (たとえば、セレクターに xpath を使用すること、継承の代わりに xinclude を使用することなど) を選択します。など) したがって、Python をまったく知らないが XML に非常に優れている人にとっては、より自然なことかもしれません。
では、あなたの「聴衆」は何ですか?Python プログラマーなら、Mako をお勧めします (速度と親しみやすさのため)。XML の専門家で Python に慣れていない場合は、Genshi の方が適している可能性があります (「Python とは距離を置いて」アプローチし、XML 文化により近いものにするため)。
あなたは「平均的なジョー」と言いましたが、ジョーは Python を知りませんし、xpath は彼にとって深い暗い謎です。それが本当にあなたの聴衆だった場合、Django のような他のテンプレート システムが実際により適しているかもしれません (彼がトラブルに巻き込まれないように助けてください;-)。
Pythonコードを埋め込まなくても、テンプレート化だけで十分ではないでしょうか?
テンプレート言語に十分な論理機能があり、本質的にそれ自体がスクリプト言語である場合のみ。その時点で、Python を使用した方がよいかもしれません。
より複雑なサイトでは、複雑なプレゼンテーション ロジックと、さまざまな場所/ページで繰り返されるセクションや再帰ツリーなどの重要なテンプレート構造が必要になることがよくあります。「テンプレート内のコードは悪い」という宗教的な立場を取るため、テンプレート言語が背後で手を縛っている場合、これは面白くありません。
次に、Python ビジネス ロジックでプレゼンテーション ヘルパー関数を作成することになります。これは、プレゼンテーション ロジックとアプリケーション ロジックの混合が当初よりも悪くなります。あなたがそれを上品に使うことを信頼していないという理由で、あなたから力を奪う言語は不自由です.
Genshiは、xmlドキュメントの生成のために考案されています(読み取り:バイアス、最適化)(あらゆる種類のテキストドキュメントの生成をサポートしている場合でも)。MakoおよびDjangoテンプレートは、一般的なテキストテンプレートシステムとして考えられています。Evoqueもありますが、基本的な違いが1つあります。これは、テンプレートでPython式のみを許可するように設計を選択すること、つまりpythonステートメントを許可しないことです。
これの重要な最終結果の1つは、Evoqueがサンドボックスでテンプレート評価を実行できることです。つまり、信頼できないユーザーにテンプレートのソースコードへの書き込みアクセスを安全に与えることができます。これは、埋め込みも可能なテンプレートエンジンでは事実上不可能な機能です。Pythonステートメントの。ああ、そして直接の機能比較で何も失うことはありませんが、Evoqueは実際にはMakoよりも高速である場合があり、Python3でも実行されます。
これは少し宗教的な問題のようです。Django テンプレートは厳格な方針をとっています: テンプレートにコードはありません。これは、コードを書く人とページを作成する人が明確に分かれているショップで使用されるシステムとしての歴史があるためです。他の人 (おそらくあなた) は、そのような明確な区別をしておらず、レイアウトとロジックの間のより柔軟な境界線を持つ方が快適に感じるでしょう。
それは本当に好みの問題になります。
テンプレート内に Python コードを挿入しないように自分を律することができますが、それが実際に作業を完了するための最後の手段である場合を除きます。私は Django のテンプレートで同様の問題に直面しており、コンテンツを表示するために深刻な CSS 体操を行う必要があります。テンプレートで Python コードを使用できれば、もっと良かったのにと思います。