0

我有一个只有一个应用程序的 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 index page,那么您的自定义视图将被调用,如果它是一个 admin page(以 开头admin/)但不是admin index page,那么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如果您不想在项目中使用它,可以在 中将其注释掉。只需要将其从管理员中删除,您就需要取消注册。在这里查看。

另一个技巧是,您可以覆盖管理 urlmysite/admin/以简单地重定向到 mysite/admin/myapp/您不需要定义自己的重定向视图的位置。Django DRY在那里摇摆不定。:)

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)),
                      )

要进行更多自定义,您需要通过自定义管理模板来更改管理索引页面。医生在这里。 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 回答