2017-10-05 80 views
1

我想只显示管理员为我的网站与ID 1. 在其他意见我已经在dispatch定义这个,但我还没有找到一种方法来做到这一点管理员。只允许django管理员现场ID 1

我试过制作custom admin class,但是我没有看到这样做的方法。

有没有办法为管理员定义dispatch或限制管理员显示的网站?

我使用的调度:

def dispatch(self, *args, **kwargs): 
    try: 
     if get_current_site(self.request).pk != settings.MY_SITE_ID: 
      response = render(self.request, 'my_app/404.html') 
      response.status_code = 404 
      return response 
    except Site.DoesNotExist: 
     response = render(self.request, 'my_app/404.html', {'site_doesnotexist': True}) 
     response.status_code = 404 
     return response 

    return super(MyView, self).dispatch(*args, **kwargs) 

回答

0

您可以指定设置的不同ROOT_URLCONF文件与管理的站点启用。这ROOT_URLCONF将包括管理url模式。

MY_SITE_ID = 1 
ROOT_URLCONF = 'my_project.urls_with_admin' 
# my_project/my_project/urls_with_admin.py 

from django.conf.urls import url 
from django.contrib import admin 

from urls import urlpatterns 

urlpatterns.append(url(r'^admin/', admin.site.urls)) 

基础urls.py文件,由其他网站使用,会忽略管理模式,使管理员无法访问。

+0

我不确定我关注,我的所有网站都使用相同的设置文件。所有网站也有相同的观点和模型。我如何为一个网站设置单独的设置文件? – guival

+0

对不起。我以为你使用的是[站点框架](https://docs.djangoproject.com/en/1.11/ref/contrib/sites/),它是Django的一个可选部分,并且每个站点都有单独的设置文件。您还可以使用中间件为每个请求设置'request.urlconf',但我不确定是否可以从中间件调用'get_current_site'。 – evergreen

相关问题