複数のアプリケーションが同じリソース (テンプレート、静的ファイル、管理コマンド、翻訳) の異なるバージョンを提供する場合、INSTALLED_APPS で最初にリストされているアプリケーションが優先されます。- INSTALLED_APPS に関する Django ドキュメント
'django.contrib.admin'
アプリが の前にリストされていることを確認してくださいINSTALLED_APPS
。
change_list.html
次のいずれかのディレクトリにテンプレートを作成します。
# Template applies to all change lists.
myproject/myapp/templates/admin/change_list.html
# Template applies to change lists in myapp.
myproject/myapp/templates/admin/myapp/change_list.html
# Template applies to change list in myapp and only to the Foo model.
myproject/myapp/templates/admin/myapp/foo/change_list.html
テンプレートは自動的に取得されますが、上記のパスのいずれにもない場合は、管理モデル属性を介して指定することもできます。
class MyModelAdmin(admin.ModelAdmin):
#...
change_list_template = "path/to/change_list.html"
それが存在する元の change_list.html の内容を調べることができますpath/to/your/site-packages/django/contrib/admin/templates/admin/change_list.html
。他の回答では、テンプレートをフォーマットする方法も示しています。Nikolai Saiko が、'extends' と 'super' を使用して関連する部分をオーバーライドする方法を示します。概要:
{% extends "admin/change_list.html" %} {% load i18n %}
{% block object-tools-items %}
{{ block.super }}
<li>
<a class="historylink" href="...">My custom admin page</a>
</li>
{% endblock %}
href="..."
URLを入力しましょう。管理 URL 名は名前空間「admin」にあり、次のように検索できます。
{% url 'admin:custom_view' %}
ボタンを change_form.html に追加する場合、現在のオブジェクト ID を渡したい場合があります。
{% url 'admin:custom_view' original.pk %}
ここで、カスタム ビューを作成します。これは通常のビュー (Web サイトの他のページと同様) または admin.py のカスタム管理ビューです。ModelAdmin の get_urls メソッドは、URLconf と同じ方法でその ModelAdmin に使用される URL を返します。したがって、URL ディスパッチャーに記載されているように拡張できます。
class MyModelAdmin(admin.ModelAdmin):
def get_urls(self):
urls = super(MyModelAdmin, self).get_urls()
my_urls = patterns('',
url(r'^my_view/$', self.my_view, name="custom_view")
)
return my_urls + urls
def my_view(self, request):
# custom view which should return an HttpResponse
pass
# In case your template resides in a non-standard location
change_list_template = "path/to/change_list.html"
ModelAdmin でビューにパーミッションを設定する方法に関するドキュメントをお読みください: https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_urls
ビューを保護し、スタッフ ステータスのユーザーにのみアクセスを許可できます。
from django.contrib.admin.views.decorators import staff_member_required
@staff_member_required
def my_view(request):
...
request.user.is_active
非アクティブなユーザーをチェックして処理することもできます。
更新: フレームワークを利用して、カスタマイズを最小限に抑えてください。多くの場合、アクションは良い代替手段となります: https://docs.djangoproject.com/en/1.5/ref/contrib/admin/actions/
更新 2: JS の例を削除して、ボタンのクライアント側を挿入しました。必要な場合は、リビジョンを参照してください。