0

Django のドキュメントには、次のことが明確に記載されています。

contrib\admin\templates\admin のすべてのテンプレートがアプリごとまたはモデルごとに上書きされるわけではありません。

次に、できるものをリストします。そして、base.html私が興味を持っているものはリストされていません。プロジェクトごとにオーバーライドできますが、アプリごとにはオーバーライドできません。base_site.htmlindex.html

私の質問は: django.contrib.admin 内のコードを編集する必要のない方法はありますか? 私はいくつかのモンキーパッチソリューションを喜んで検討します:-)。アプリのディレクトリ内にこれら 3 つのファイルのカスタム バージョンがありtemplates、アプリを使用する各プロジェクトでそれらを使用する必要があります。

私が興味を持っている理由は、大幅にカスタマイズされた管理インターフェイスを備えた大規模で再利用可能なアプリを作成しているためです。カスタム テンプレートを、アプリが使用される各プロジェクトのテンプレート ディレクトリに追加します。これらのコア テンプレートに新しい変更を加えた新しいバージョンのアプリをリリースすると、影響を受けるプロジェクトにすべてを再コピーすることになります。うーん。

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

しかし、私の場合、アプリはいくつかのクライアント プロジェクトの「目玉」となり、それらのプロジェクトの他のアプリは単なる補助的な役割になります。

既存のテンプレートの CSS ベースのカスタマイズは、これまでのところしか得られません。絶対に必要でない限り、JavaScript DOM 操作ソリューションに頼ることをためらっています。

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

シンボリックリンクは、より良い方法が提案されていない場合、おそらく私の選択方法ですが、誰かがより良い解決策を持っているかどうかを知りたいです.

4

1 に答える 1

1

あなたの目標は、アプリやモデルではなく、プロジェクト全体のテンプレートをオーバーライドすることですが、プロジェクトのテンプレート フォルダーにテンプレートを配置したくありません。

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

TEMPLATE_DIRS = (
    os.path.join(PROJECT_PATH, 'templates'),
    os.path.join(PROJECT_PATH, 'my_app','templates'),
)
于 2009-06-09T17:10:37.283 に答える