1. ホーム
  2. python

[解決済み] Django の基本的な admin テンプレートを上書きしたり拡張する方法は?

2022-04-29 02:42:58

質問

管理用テンプレート(例:admin/index.html)を拡張しつつ、オーバーライドするにはどうすればよいでしょうか? https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-vs-replacing-an-admin-template )?

まず - この質問は以前にも質問され、回答されていることは承知しています(参照 Djangoです。アプリテンプレートのオーバーライドとエクステンション しかし、回答にあるように、app_directoriesテンプレートローダーを使用している場合(ほとんどの場合そうです)、それは直接適用されるものではありません。)

私の現在の回避策は、管理テンプレートから直接拡張するのではなく、コピーを作成してそこから拡張することです。これはとてもうまくいくのですが、本当に混乱しますし、管理者テンプレートが変更されたときに余分な作業が増えてしまいます。

テンプレート用のカスタムextend-tagを考えることもできますが、すでに解決策があるのなら、車輪の再発明はしたくありません。

余談ですが、この問題がDjango自体で解決されるかどうか、誰か知っていますか?

解決方法は?

更新情報 :

あなたの使っている Django のバージョンのドキュメントを読んでください。

https://docs.djangoproject.com/en/1.11/ref/contrib/admin/#admin-overriding-templates https://docs.djangoproject.com/en/2.0/ref/contrib/admin/#admin-overriding-templates https://docs.djangoproject.com/en/3.0/ref/contrib/admin/#admin-overriding-templates

2011年当時のオリジナル回答です。

私も1年半ほど前に同じ問題を抱えたことがありますが、その時に見つけた素敵な テンプレートローダーはdjangosnippets.orgにあります。 を使うと、これが簡単になります。これは、特定のアプリのテンプレートを拡張することで、あなた自身の 管理画面/index.html を拡張し、管理者アプリのadmin/index.html テンプレートを拡張します。こんな感じ。

{% extends "admin:admin/index.html" %}

{% block sidebar %}
    {{block.super}}
    <div>
        <h1>Extra links</h1>
        <a href="/admin/extra/">My extra link</a>
    </div>
{% endblock %}

このテンプレート・ローダーをどのように使うか、その完全な例を ブログ記事 を作成しました。