2

既存のプロジェクト内にある Satchmo インストールで作業しています。このプロジェクトには、独自のテンプレートと、インストールされているさまざまなアプリのテンプレートがあります。これらのアプリ固有のテンプレートの一部には、base.html から派生することを期待する独自の app_base.html バリエーションがあります。Satchmo テンプレートで同じことを実行して、それらをプロジェクトのベース内に配置したいと考えていますが、それらすべてに追加の html を追加したいと考えています。

  • /テンプレート
    • base.html
    • index.html
    • /ニュース
      • news_base.html (base.html を拡張し、ニュース固有のテンプレート機能を追加します)
      • index.html
      • 詳細.html
    • /お店
      • base.html (Satchmo のベースを上書き)

この構造はある程度機能しますが、期待したとおりではありません。/store/base.html (Satchmo のベース) では、単純にすべてをテスト メッセージに置き換えました。メッセージが表示されているので、satchmo がサイトのベースではなく、そのベースをロードしていることがわかります。ただし、次を使用して以来、プロジェクトのベースを拡張できなくなりました。

{% extends "base.html %}

呼び出し自体と次のものが機能しないため、再帰エラーが発生します。

{% extends "../base.html" %}

プロジェクトの base.html を少し別の名前に変更して、すべてのアプリ固有のテンプレートをそれらに向けることができることはわかっていますが、テンプレート構造のそのような基本的な側面に対するかなり大きなハックのようです。

4

3 に答える 3

0

私はちょうどこれと同じ問題を抱えていました。これは、satchmo の開発者が、ショップ テンプレート ディレクトリに「空の」ベースを配置することで、これを計画したようです。これはもうあなたには関係ないかもしれませんが、私はここでこれを見たいと思っていました.

テンプレート ディレクトリに「shop」ディレクトリを作成し、メインの satchmo base.html をそのディレクトリにコピーできます。

これは私にとってはうまくいきました。

于 2010-11-03T22:54:15.640 に答える
0

うーん、django が比較的そのようにテンプレートを検索するとは思いませんでした。

ちょっとクレイジーなハックですが、これはうまくいくはずです:

  • /templates/store/base.html伸びる"global_base.html"
  • /templates/global_base.html伸びる"base.html"
于 2009-03-12T01:15:23.470 に答える
0

テンプレート構造の設定方法によっては、settings.TEMPLATE_LOADERS 変数をいじるのも良い考えかもしれません。

TEMPLATE_LOADERS デフォルト: ('django.template.loaders.filesystem.load_template_source', 'django.template.loaders.app_directories.load_template_source') さまざまなソースからテンプレートをインポートする方法を知っている (文字列としての) callable のタプル。Django テンプレート言語: Python プログラマ向けを参照してください。

これがテンプレートのロード プロセスに与える影響の詳細については、http: //docs.djangoproject.com/en/dev/ref/templates/api/#loader-typesを参照してください。

あなたの問題を説明する方法から、「app_directories.load_template_source」ファイル行をコメントアウトすることで、あなたがしていることを達成する方法をよりよく見つけることができるようです.

django.template.loaders.app_directories.load_template_source ファイルシステム上の Django アプリからテンプレートを読み込みます。INSTALLED_APPS 内のアプリごとに、ローダーはテンプレート サブディレクトリを探します。ディレクトリが存在する場合、Django はそこでテンプレートを探します。

これは、個々のアプリでテンプレートを保存できることを意味します。これにより、デフォルトのテンプレートを使用してDjangoアプリを簡単に配布できます。

たとえば、この設定の場合:

INSTALLED_APPS = ('myproject.polls', 'myproject.music') ...次に get_template('foo.html') は、これらのディレクトリで次の順序でテンプレートを検索します。

/path/to/myproject/polls/templates/foo.html /path/to/myproject/music/templates/foo.html ローダーは、最初のインポート時に最適化を実行することに注意してください: INSTALLED_APPS パッケージが持つリストをキャッシュします。テンプレート サブディレクトリ。

このローダーはデフォルトで有効になっています。

于 2009-06-27T22:41:18.993 に答える