Django1.1ではadminアプリが大幅に改善され、拡張が1.0に比べて容易になりました。
ModelAdminにページを追加する場合は、ビューをメソッドとして追加しておき、get_urlsでurlpatternsにURLを追加します。
guestbookアプリのadmin.py
# coding:utf8 from django.core.exceptions import PermissionDenied from django.contrib import admin from django.views.generic.simple import direct_to_template from models import Greeting class GreetingAdmin(admin.ModelAdmin): def my_view(self, request): """ 新たに追加するビュー """ # パーミッションのチェック # とりあえず変更パーミッションで if not self.has_change_permission(request): raise PermissionDenied opts = self.model._meta # adminサイトのデザインに合わせるならコンテキストが必要 return direct_to_template(request, 'admin/mypage.html', { 'title': u'マイページ', 'opts': opts, 'media': self.media, 'app_label': opts.app_label, }) def get_urls(self): """ urlsプロパティで使われる urlを追加するためにオーバーライドします """ from django.conf.urls.defaults import * # urlpatternsにURLを追加する # このパターンでModelAdminの場合は # 元のurlpatternsよりも先に追加しないと解決されない urlpatterns = patterns('', url(r'^mypage/$', self.my_view, name='mypage'), ) + super(GreetingAdmin, self).get_urls() return urlpatterns class Meta: model = Greeting admin.site.register(Greeting, GreetingAdmin)
adminのデザインに合わせると結構コンテキストが必要になるので、このあたりは改善の余地ありかも。
templates/admin/mypage.html
{% extends "admin/change_list.html" %} {% load i18n webdesign %} {% block breadcrumbs %} <div class="breadcrumbs"> <a href="../../"> {% trans "Home" %} </a> › <a href="../"> {{ app_label|capfirst }} </a> › {{ title|capfirst }} </div> {% endblock %} {% block content %} <p> {% lorem 3 %} </p> {% endblock %}
パンくずリストはadminのテンプレートからコピーして少し編集した。あんまりスマートじゃない。
それでも1.0のころに比べるとかなりマシ。