我有一个只有一个应用程序的Django项目。
我不需要站点管理员(与我的应用程序管理员相同),因此我想绕过站点管理员并直接转到我的应用程序管理员,即登录并删除痕迹导航中的Home
后直接转到mysite/admin/myapp/
。
我该怎么做?
Django Url Dispatcher
扫描所有定义的 url 定义,并将请求重定向到第一个匹配的 url 定义。此时,url 排序很重要,在项目根目录urls.py
文件中:
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
中将其注释掉。只是要将其从管理员中删除,您需要取消注册。在这里查看。
另一个技巧是,您可以覆盖管理员 url mysite/admin/
,以简单地重定向到不需要定义自己的重定向视图mysite/admin/myapp/
。姜戈干摇滚在那里。:)
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
最干净和最简单的方法是在urls.py
中使用通用RedirectView
:
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)),
)