0

アプリが 1 つしかない Django プロジェクトがあります。

サイト管理者 (アプリ管理者と同じ) は必要ないので、サイト管理者をバイパスしてアプリ管理者に直接移動したいと思います。つまり、ログインしてブレッドクラムmysite/admin/myapp/ を削除Homeした後に直接アクセスします。

どうやってやるの?

4

4 に答える 4

4

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/")
于 2012-09-14T12:20:30.317 に答える
3

できることは、管理者のインデックス ページをオーバーライドして、アプリ固有の管理者ページにリダイレクトすることです。

@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",)))
于 2012-09-14T12:28:09.950 に答える
1

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

于 2012-09-14T12:16:35.447 に答える
1

最もクリーンで簡単な方法は、ジェネリックRedirectViewinを使用すること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)),
)
于 2015-01-02T10:45:02.030 に答える