3

私はいくつかの小さなDjangoプロジェクトを実行しましたが、そのたびにDjangoのテンプレート言語の明らかな制限に見舞われました。ランダムな例として、テンプレートのコンテキストで変数バーとdict fooがある場合、独自のフィルターを作成しない限りfoo[bar]にアクセスできないことを知ってショックを受けました。

これは、ページをデザインする人がプログラマーではない環境向けにDjangoが作成されたためだと読みました。という事は承知しています。

しかし、それは私にとって問題ではないとしましょう。Mako(任意のPython式を実行することもできる)のようなもっと強力なものに切り替えるのではなく、Djangoのテンプレート言語に固執する必要がある理由はありますか?

しばらく前に学校のプロジェクトでマコを使う機会があり、その力がとても気に入りました。たとえば、プロジェクトの一環として、各行とセルの作成がかなり複雑な大きなテーブルを作成する必要がありました。それでも、テンプレートを次のように見せることはできます。

<table>
    % for foo in foos:
        ${makerow(row)}
    % endfor
</table>

<%def name="makerow(row)">
    <tr>
        # Blah blah blah (possibly a call to makecell somewhere)
    </tr>
</%def>

多分これはプレゼンテーションと論理の分離の違反です、しかし男の子はそれが素晴らしくてきれいです。サブルーチン!抽象化!良いもの。

そしてフォローアップの質問:代替のテンプレート言語を使用することがDjangoコミュニティによって嫌われていない場合、誰かが提案するものはありますか?私が言ったように、私はマコが本当に好きですが、それは文字通り私がDjango以外で使用した唯一のものです。

4

6 に答える 6

4

正直言って、回答をよく読んでいませんでした。しかし、それは「テンプレートにPythonがない」、「ビューにロジックがあまりない」タイプのものがたくさんあると思います。

イデオロギーを脇に置いて実用主義を選ぶなら、マコは良い選択だと思います。私はこれを生産能力(主に速度、電力、動的継承)で3年以上使用しています。それは失敗したり、他の方法で迷惑をかけたりしていません。

イデオロギーは正しいですが、時には何ができるのか、何が正しいのかを考えなければなりません。Djangoテンプレートエンジンに制限されていない場合は、それを使用してください。より多くのパワーが必要な場合は、MakoとJinjaが最適です。

Djangoを使用すると、テンプレートエンジンを簡単に交換して、ほとんどのものを以前と同じように機能させることができます:http: //docs.djangoproject.com/en/dev/ref/templates/api/#using-an-alternative-template-language

于 2010-11-22T20:44:54.777 に答える
3

テンプレートで任意のコードを実行することは、本質的に良いことと見なされるべきではありません。このような機能を利用することは、通常、アーキテクチャが壊れていることを示しています。

とは言うものの、Djangoのドキュメントを読むと、必要なコンポーネントを自由に使用、破棄、および交換する必要があることが明示的に示されています。Djangoは意図的にモジュール化されており、実際、最も簡単に交換できる2つのコンポーネントは、テンプレートエンジンとORMです。

Djangoテンプレートエンジンの代わりにMakoを使用する場合は、Makoを使用してください。

于 2010-11-22T02:56:43.050 に答える
2

jinjaやMakoなどの使用を控える理由のひとつは、djangoの機能強化によってアプリが将来にわたって利用できるようにならない可能性があるためです。

昨年、テンプレートの読み込みを高速化するというAlexGaynorによるGSocプロジェクトの提案がありました。-その後、NoSQLプロジェクトを優先して撤回されました。

しかし、コア開発者が増え、チケットのクリアが速くなったので、最終的にはコンポーネントを自家製のものに変更する必要があることを十分に理解して、djangoフルスタックに固執します。

あなたが本当にあなたが選んだものを含む素晴らしいPythonライブラリの接着剤フレームワークを探しているなら、Flaskはそこにあります。

于 2010-11-22T07:27:42.387 に答える
1

addons.mozilla.orgはDjango+Jingaを使用しています:https ://github.com/jbalogh/zamboni

コミュニティがジンガに眉をひそめるかどうかはわかりませんが、例として多くの人がジンガを気に入っています。

于 2010-11-22T02:56:16.257 に答える
0

「プロジェクト」ではなく「アプリ」を意味し、それが完全に私的な使用ではない場合は、テンプレートエンジンを変更しないことをお勧めします。一部のコア設定を変更する必要があるため、他のユーザーがアプリを使用する可能性がはるかに低くなり、他のアプリやプロジェクト全体とのやり取りが中断される可能性があります。

于 2010-11-22T03:19:15.767 に答える
0

あなたの例は、人々がいたるところにPHPとhtmlを混ぜ合わせていた昔のPHPの時代を思い出させます。本当にパワフルだと感じました。ある日まで、人々は混乱が維持できないことに気づきました。

デザインが「機能」に切り刻まれた場合、デザイナーはそれを理解しますか?それはおそらく彼を苛立たせるでしょう。

于 2010-11-22T03:37:22.267 に答える