アプリが 1 つしかない Django プロジェクトがあります。
サイト管理者 (アプリ管理者と同じ) は必要ないので、サイト管理者をバイパスしてアプリ管理者に直接移動したいと思います。つまり、ログインしてブレッドクラムmysite/admin/myapp/
を削除Home
した後に直接アクセスします。
どうやってやるの?
アプリが 1 つしかない Django プロジェクトがあります。
サイト管理者 (アプリ管理者と同じ) は必要ないので、サイト管理者をバイパスしてアプリ管理者に直接移動したいと思います。つまり、ログインしてブレッドクラムmysite/admin/myapp/
を削除Home
した後に直接アクセスします。
どうやってやるの?
Django Url Dispatcher
定義されたすべての URL 定義をスキャンし、最初に一致した URL 定義に要求をリダイレクトします。この時点でurls.py
、プロジェクト ルートのファイルでURL の順序が重要になります。
urlpatterns += patterns('',
...
(r'^admin/', include(admin.site.urls)),
...
)
管理者インデックス ページのURL からカスタム ビューへのURL リダイレクトを定義できます。
urlpatterns += patterns('',
...
(r'^admin/$', 'myapp.views.home'),
(r'^admin/', include(admin.site.urls)),
...
)
したがって、リクエスト URL が管理者インデックス ページである場合、カスタム ビューが呼び出されます。それが管理者ページ ( で始まるadmin/
) であり、管理者インデックス ページではない場合、admin.site.urls
実行されます...
myapp.views
簡単なリダイレクト ビューを作成します。
from django.http import HttpResponseRedirect
def home(request):
return HttpResponseRedirect("/myapp/")
できることは、管理者のインデックス ページをオーバーライドして、アプリ固有の管理者ページにリダイレクトすることです。
@FallenAngel で述べられているように、urls.py を更新して、管理インデックス ページのビューを表示する必要があります。そのビューは、アプリの内部管理ページにリダイレクトできます。
from django.http import HttpResponseRedirect
from django.core import urlresolvers
def home(request):
return HttpResponseRedirect(urlresolvers.reverse('admin:app_list', args=("myapp",)))
INSTALLED_APPS
プロジェクトでそれを望まない場合は、でコメントアウトすることができます。管理者から削除するには、登録を解除する必要があります。こちらをご覧ください。
もう1つのハックは、管理URLをオーバーライドして、独自のリダイレクトビューを定義する必要のないmysite/admin/
リダイレクト先にする ことができることです。mysite/admin/myapp/
DjangoDRYはそこで揺れ動きます。:)
from django.http import HttpResponseRedirect
urlpatterns = patterns('',
url(r'^mysite/admin/$', lambda x: HttpResponseRedirect('/mysite/admin/myapp/')),
url(r'^mysite/admin/', include(admin.site.urls)),
)
さらにカスタマイズするには、管理者テンプレートをカスタマイズして管理者インデックスページを変更する必要があります。Docはこちらです。 https://docs.djangoproject.com/en/1.3/intro/tutorial02/#customize-the-admin-index-page
最もクリーンで簡単な方法は、ジェネリックRedirectView
inを使用することurls.py
です。
from django.core.urlresolvers import reverse_lazy
from django.views.generic import RedirectView
urlpatterns = patterns('',
url(r'^admin/$', RedirectView.as_view(url=reverse_lazy('admin:app_list',
args=('myapp',)))),
url(r'^admin/', include(admin.site.urls)),
)