Django 管理テンプレートのオーバーライドと拡張を同時に行う
Django の管理テンプレートをオーバーライドすることは、管理インターフェイスをカスタマイズする場合の一般的なニーズです。ただし、AppDirectories テンプレート ローダーも利用しながら、テンプレートのオーバーライドと拡張の両方を行う場合は、ジレンマに直面することがあります。
オーバーライドと拡張
Django の場合、テンプレートをオーバーライドするには、既存のテンプレート ファイルを完全に置き換える必要がありますが、拡張すると、テンプレート内の特定のブロックにコンテンツを追加できます。 template.
AppDirectories テンプレート ローダーの課題
AppDirectories テンプレート ローダーでは、管理テンプレートをオーバーライドおよび拡張するときに課題が発生します。このローダーを使用する場合、Django は拡張テンプレートが元のテンプレートと同じディレクトリに存在することを想定します。管理テンプレートが別のアプリケーションにある場合、これは問題になる可能性があります。
既存のソリューション
カスタム テンプレート ローダー:
推奨される解決策は、アプリ ディレクトリ間でのテンプレートの拡張をサポートするカスタム テンプレート ローダーを使用することです。このようなローダーの 1 つは、DjangoSnippets.org で入手できます。
Django のテンプレート ローダーのカスタマイズ:
もう 1 つのオプションは、Django の AppDirectories テンプレート ローダーをカスタマイズして、特定のアプリからテンプレートを拡張できるようにすることです。これには、AppDirectories ローダーから継承するカスタム テンプレート ローダー クラスの作成とその動作の変更が含まれます。
Django の将来の計画
この記事の執筆時点では、Django はネイティブにサポートしていません。アプリディレクトリ全体にテンプレートを拡張します。ただし、この機能を提案する GitHub には未解決の問題があります。これを実装すると、Django 管理テンプレートをオーバーライドして拡張するプロセスが大幅に簡素化されます。
カスタム ローダーを使用した使用例:
上記のカスタム テンプレート ローダーを使用すると、テンプレートに以下を実装できます:
{% extends "admin:admin/index.html" %} {% block sidebar %} {{block.super}} <div> <h1>Extra links</h1> <a href="/admin/extra/">My extra link</a> </div> {% endblock %}
このコードは、管理インデックス テンプレートを拡張します。追加のサイドバー コンテンツを使用して、元のテンプレートを効果的にオーバーライドして拡張します。
以上がAppDirectories テンプレート ローダーを使用して Django 管理者テンプレートをオーバーライドおよび拡張する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。