2011-07-27 13 views
0

djangoでは、私が一般的に好むはずですが、なぜですか?できるだけ少ない「ルートオブジェクト」(例えば要求)を通過Django:複雑なテンプレート変数名や複雑なビューを持つべきでしょうか?

  • 長いテンプレート変数名、:

    {% if request.current_page.get_children.0.get_absolute_url %}

  • かが異なる「ルートオブジェクト」の地獄の多くを渡しておきます単純なテンプレート変数名:

    どこかマイルで

    {% if first_child_url %}

  • 例えば、ddle。 children

    {% if children.0.get_absolute_url %}

    またはfirst_child

    {% if first_child.get_absolute_url %}

を渡すを渡す私は眺めに私は必要なすべての時間を変更する必要はありませんので、最初のアプローチの利点は、疎結合であります別の変数を使う。第2のアプローチの利点は、テンプレートがより簡単でより清潔であることである。

コンテキスト変数を追加することができない汎用ビュー(またはサードパーティビュー)を使用している場合(つまり、コンテキスト変数を追加する唯一の方法はミドルウェアまたはコンテキストプロセッサを作成することです)、その変更は何ですか?

+0

余分なコンテキストを一般的なビュー(少なくともDjango 1.3では)に追加できます。それをチェックしてください(https://docs.djangoproject.com/ja/1.3/ref/generic-views/)変数extra_contextを見つけたら、そこに何かを追加することができます。 – Hassek

+0

@Hassek:私は[django-cms](https://www.django-cms.org/)を使用しています。そのビューではextra_contextを渡すことはできません。何かが見つからないかもしれませんが、他の方法では、ミドルウェアやコンテキストプロセッサ以外のdjango-cmsページに余分なコンテキスト変数を渡すことができます。 –

+0

ああ、よくルールを変更します。 django-cmsをまったく使っていない:p – Hassek

答えて

2

あり、このための正しい答えはありませんが、私はあなたに考慮すべき何かを与えることができます:

1)私は通常

のようなものを回避しようとする理由である黙って失敗するテンプレート、中に誤って入力した変数名それとは対照的に
{% if request.current_page.get_children.0.get_absolute_url %} 

2)、ビュー内のすべての問題はすぐに私は時々時に目何)例外を発生させると

first_child_url = request.current_page.get_children[0].get_absolute_url 

3をデバッグするためには自明であろう状況がそれを呼び出すと、モデルにショートカットメソッドを追加して、テンプレートからメソッドを呼び出すことはできますが、式のPython側には複雑さを保ちます。

あなたが余分な文脈を追加することができず、(あなたのコメントに記載されているように)テンプレートタグを使ってそれを行う必要があるのなら、私は複雑なテンプレートオプションに行くなら最高だと思います。 カスタムテンプレートタグは、何かを行う唯一の方法である場合にのみ使用し、決してショートカットとして使用することはありません。

希望します....

2

あなたが唯一の開発者であれば、それは主に味の問題です。ただし、ビューをコーディングするデザイナーがテンプレートを作成するデザイナーではない場合は、ビューとテンプレートの間で明確に定義された「コントラクト」と協力するほうが簡単です。

私はAPIのインタフェースについて考えるのと同じように、ビューのパラメータをテンプレートに考える傾向があります。私のウェブサイトのロジックは変わる可能性がありますが、テンプレートに渡されるデータ構造を尊重している限り、私は何かを書き直す必要はありません。また、グループで作業する場合、これは非常に重要です。

関連する問題