web-dev-qa-db-ja.com

Pythonテンプレートエンジン:XMLとカスタム構文の実際の利点と欠点は何ですか

2種類のpythonテンプレートエンジン; XML(GenshiやKidなど)とカスタム構文(CheetahやJinja2など)の本当の違い(長所と短所)は何かを知りたいです。 )。

私はどちらが良いか、または推奨事項を探していません。完璧な解決策は1つもないこと、そして最善の解決策は問題によって異なることを理解しています。問題にどちらかを選択する前に、2つのタイプの違いをよりよく理解したいと思います。

このリストは、すべてのテンプレートソリューションに当てはまるとは限りません。

XMLの利点:

  • XMLを使用しており、ほとんどの場合、開発者に親しみやすいものです。学ぶべきいくつかの新しい(ifelse、フローロジック)項目があります。
  • 既存のXMLツールチェーンで動作します。
  • 作業中のデータに精通しているため、より強力です。 (Genshiはコンテキストに対応しています)

XMLの欠点:

カスタム構文の利点:

  • XMLベースのエンジンよりも高速です。 (前のリンクを参照)
  • これは、簡単に学ぶことができるシンプルで強力な構文です。

カスタム構文の欠点:

  • それは学ぶべきもう一つの構文です。
  • 既存のXMLツールチェーンではスムーズに機能しない可能性があります。
3
Supermighty

おそらく、テンプレートがどのように作成されるかについて検討する必要があると思います。テンプレートのポイントは、人々がもはや手作業でコーディングしていないことを確認することです(html、LaTeX、xmlなど)。これが、テンプレートエンジンが継承やその他の優れた機能を許可する理由です。

ですから、ダニエル・ローズマンは、人間にXMLを書かせるのは悪いことだと言ったときに良い点があります。ある程度、テンプレートを使用しているので、それを行う必要はありません。

そのことを念頭に置いて、pythonテンプレートエンジン間で私が見た最大の違いは、実際には、XMLを使用するか、カスタム構文を使用するかではありません。大きな違いは、テンプレートエンジンを使用すると、任意のpythonコードをテンプレートに埋め込むことができます。

あなたはチーターとJinja2の両方について言及しました。どちらにも特別な構文がありますが、Cheetaでは、任意のpython=をテンプレートに埋め込むことができますが、Jinja2はテンプレートで実行できることに対して厳しい制限を課しています。テンプレートを明確かつ簡潔にすることで、ビジネスロジックとプレゼンテーションロジックを潜在的に混合することの間。

結局のところ、利点は、コードの読み取り、書き込み、再読み取り、および再書き込みがいかに簡単であるかによってもたらされます。

4
Wilduck

最も重要な原則の1つは、人間にXMLを記述させることは悪です。

9
Daniel Roseman

あなたの長所と短所は問題があると思います

XML:遅いです。

それは必ずしも真実ではありません。 Jinjaと同様に、XMLテンプレートをコンパイルできます。たぶんgenshiはすでにそれをしています。

XML:開発者にとって家族的なもの

また、真実ではありません。 XMLでループを行う方法は?基本テンプレートを拡張するには?明らかに、テンプレートに依存します。したがって、まだ学習する必要があり、XML構文は役に立ちません。

カスタム:学ぶべき別の構文です。

上で述べたように、とにかく新しい構文を学ぶ必要があり、カスタム言語を使用すると、構文はもう少し快適になる可能性があります。たとえば、「else」ステートメントを使用します。また、プログラマーだけでなく、技術的な観点があまりない設計者もテンプレートを使用する必要がある場合があることにも注意してください。

カスタム:既存のツールチェーンではスムーズに機能しない可能性があります。

これはXMLにも当てはまる可能性があります。おそらく出力としてHTMLが必要です。これは、(XHTMLを使用しない場合は)XMLではありません。しかし、あなたの主張は真実であり、私にとってはそれが答えです:さまざまなアプローチがさまざまなニーズ/ツールチェーンに適合します。

ニーズとツールチェーンは、ほとんどの場合、期待される出力によって決定されます。有効なXMLを出力する必要がある場合は、XMLテンプレートを使用してください。そうでない場合は使用しないでください。

0
keppla