3

現在、djangoテンプレートに問題があります。私は基本的に3つのテンプレートファイルを持っています:

  • ベース
  • story_list
  • story_detail

Story_listと_detailはBaseを拡張し、それは完全に正常に機能します。ただし、リストと詳細は、サイドバーの基本テンプレートを拡張するいくつかのコードを共有しています。私は基本的に両方のテンプレートでコードのチャンクを繰り返しています、そして私のプログラマーはそれがちょうど間違っていると言います。より良い方法が必要です、私はそれを確信しています。インクルードを試しましたが、インクルードファイルには次のものがあります。

{% block item %}
    content stuff
{% endblock %}

約3ブロック。問題は、そのどれもがピックアップ/レンダリングされていないことです。ベースを拡張するブロックセクションにファイルを含めると、すべてが適切にダンプされますが、ブロックに含めないと、何も取得されません。SSIは進むべき道ですか?私はそれをいじったが、それも適切に機能していないようだった。どんな助けでも大歓迎です。

4

4 に答える 4

16

一般的に、includesを使用することはDjangoテンプレートの答えではありません。いくつかの面であなたの質問に答えさせてください。

まず、サイドバーについて説明します。

  • ほぼすべての一般的なページがそのサイドバーを使用する予定ですか?入れてくださいBase。それらのサイドバーブロックを上書きしないでください(つまり、Story_*テンプレートにまったく書き込まないでください)。

  • Story_*このサイドバーはテンプレートに固有ですか?たとえば、という別のテンプレートを作成し、Story_baseそれを拡張します。これは、Javaで抽象スーパークラスを作成することに似ています。(答えは私の頭の中にありましたが、言葉遣いは容赦なくjpwattsからはぎ取られました。)

次に、テンプレートの継承について説明します。Story_listを拡張するという名前のテンプレートがあるとしますBase。この時点で、置くだけ{% extends "Base" %}で、Story_list 正確に BaseStory_listテンプレートはすでに完成しているため、他に入力したものはすべて無視されます。現在実行できるのは、で定義されているブロックをオーバーライドすることだけですBase

最後に、includesについて説明します。常にそれらを避けるようにしてください。PHPなどの他のテンプレートエンジンは、includesの使用を推奨しているようです。ただし、これにより、長期的には管理しにくいテンプレートが作成される可能性があります。含まれているスニペットを一瞥して、テンプレート階層内でのその位置をすぐに確認するのは少し難しいです。また、テンプレート階層にリファクタリングすることも困難です。特に、複数のレベルでそれらを含める場合(1回Base、2回Story_base、一部で1回Story_*など)。

于 2009-05-11T19:11:25.103 に答える
6

サイト全体で必要とされないストーリーテンプレート間に共通のコードがある場合は、story_base(オリジナルを拡張するbase)を作成し、ストーリーテンプレートにそれを拡張させます。

于 2009-05-11T18:58:14.593 に答える
0

このための{%include%}タグがあります。

于 2009-05-11T19:07:32.457 に答える
0
{% include xxx.html %}

このタグは機能します。

別の方法は、フィルターを使用することです。フィルタはレンダリング用の関数を呼び出します。テンプレートはレンダリング中に使用できます。

于 2013-01-20T13:33:27.087 に答える