我有一个只有一个应用程序的Django项目。
我不需要网站管理员(与我的应用管理员相同),所以我想绕过网站管理员直接转到我的应用管理员,即在登录和删除后直接转到mysite/admin/myapp/
在面包屑中Home
。
我该怎么做?
答案 0 :(得分:4)
Django Url Dispatcher
扫描所有已定义的网址定义,并将请求重定向到第一个匹配的网址定义。此时,在项目根目录的urls.py
文件中,网址排序很重要:
urlpatterns += patterns('',
...
(r'^admin/', include(admin.site.urls)),
...
)
您可以将管理员索引页网址的网址重定向定义为自定义视图
urlpatterns += patterns('',
...
(r'^admin/$', 'myapp.views.home'),
(r'^admin/', include(admin.site.urls)),
...
)
因此,如果请求网址是您的管理员索引页,那么将调用您的自定义视图,如果它是管理页面(以admin/
开头)但不是管理员索引页,然后admin.site.urls
将被执行......
在myapp.views
中写一个简单的重定向视图:
from django.http import HttpResponseRedirect
def home(request):
return HttpResponseRedirect("/myapp/")
答案 1 :(得分:2)
您可以执行的操作是覆盖管理员索引页面以重定向到特定于应用程序的管理页面。
如@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",)))
答案 2 :(得分:1)
如果您不想在项目中使用,可以在INSTALLED_APPS
中对其进行评论。只需从管理员中删除它,您需要取消注册。请查看here。
另一个黑客是,您可以覆盖管理网址mysite/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)),
)
要进行更多自定义,您需要通过自定义管理模板来更改管理员索引页面。 Doc就在这里。 https://docs.djangoproject.com/en/1.3/intro/tutorial02/#customize-the-admin-index-page
答案 3 :(得分:1)
最简洁最简单的方法是在RedirectView
中使用通用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)),
)