2009-06-09 6 views
0

Djangoのドキュメントは明確に次のように述べている:Django:プロジェクトごとにではなく、アプリケーションごとに 'unoverridable'管理テンプレートをオーバーライドしますか?

ないのcontrib \管理者\テンプレート内のすべてのテンプレート\管理者は、アプリごとやモデルごとに上書きすることができます。私が興味を持ってるもの - - リストされているものの中ではありません

はその後、およびbase.htmlbase_site.htmlindex.htmlが可能なものを示しています。プロジェクトごとにオーバーライドできますが、アプリごとにオーバーライドすることはできません。

私の質問です:django.contrib.adminの中にコードを編集することを伴わない方法がありますか?私はいくつかのモノづくりの解決策を考えていきたいと思っています:-)。私は本当に私のアプリケーションのtemplatesディレクトリ内の3つのファイルのカスタムバージョンを持って、それらを使用するアプリを使用する各プロジェクトを持っているしたい。

私が興味を持っている理由は、大きくカスタマイズされた管理インターフェイスを備えた大規模で再利用可能なアプリケーションを作成していることです。プロジェクトごとに「コア」テンプレートをオーバーライドするのは最良の解決策ではありません。アプリケーションが使用される各プロジェクトのテンプレートディレクトリにカスタムテンプレートをコピーする必要があります。これらのコアテンプレートを新たに変更して新しいバージョンのアプリケーションをリリースすると、影響を受けるプロジェクトにすべてを再コピーする必要があります。ああ。

私は、選択したいくつかのテンプレートをアプリごとにオーバーライドできるようにするという決定の背後にある理由を理解しています。結局のところ、それらをオーバーライドすることが可能だった場合、どのアプリのオーバーライドされた管理者が優先されますか?

私の場合、アプリはいくつかのクライアントプロジェクトの中心となり、それらのプロジェクトの他のアプリは単にサポートの役割を果たすだけです。

既存のテンプレートをCSSベースでカスタマイズするだけで済むようになりました。私はJavaScript DOM操作ソリューションに頼ることを躊躇しています。

解決方法の1つは、カスタムbase.htmlなどのテンプレートをappname/templates/admin /に配置してから、それらをプロジェクトのテンプレートフォルダにシンボリックリンクすることです。そうすれば、アプリケーションのアップデートはプロジェクトレベルで自動的に有効になります。

もっと良いことが示唆されない限り、シンボリックは私の選択方法ですが、誰かがより良い解決策を持っているかどうか聞いてみたいと思います。

答えて

1

あなたの目標は、プロジェクト全体のテンプレートを上書きすることです。アプリケーションやモデルではなく、プロジェクトのテンプレートフォルダにテンプレートを入れたくないということです。

したがって、 'your_app/templates/admin'フォルダに 'base.html'などを作成するだけです。 次に、テンプレートはプロジェクトのテンプレートフォルダから読み込むだけでなく、アプリケーションのフォルダから読み込むようにdjangoに伝える必要があります。 これは、settings.pyファイルsmthの変数TEMPLATES_DIRを使用して実行できます。そのような:

TEMPLATE_DIRS = (
    os.path.join(PROJECT_PATH, 'templates'), 
    os.path.join(PROJECT_PATH, 'my_app','templates'), 
) 
+0

PROJECT_PATH = os.path.abspath(os.path.dirname(__ FILE__)) –

+0

マイアプリはPROJECT_PATHの内側に住んでいませんが、そうでないものがきれいに解決策のように見えます。ありがとう! –

関連する問題