2017-10-05 2 views
1

id가 1 인 사이트에 대한 관리자 만 표시하고 싶습니다. 다른보기에서 이것을 dispatch에 정의했지만이 작업을 수행 할 방법을 찾지 못했습니다. 관리자.django admin을 사이트 ID 1에서만 허용합니다.

나는 custom admin class을 만들려고 시도했지만이 방법 중 하나를 보지 못했습니다.

admin에 대해 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_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 파일

MY_SITE_ID = 1 
ROOT_URLCONF = 'my_project.urls_with_admin' 

은 관리자에 액세스하고, 관리자 패턴을 생략 할 것이다.

+0

내가 따르지 않을지, 모든 사이트에서 동일한 설정 파일을 사용합니다. 모든 사이트는 동일한 견해와 모델을 가지고 있습니다. 한 사이트에 대해 별도의 설정 파일을 어떻게 가질 수 있습니까? – guival

+0

죄송합니다. 장고 (Django)의 선택적인 부분 인 [Sites Framework] (https://docs.djangoproject.com/en/1.11/ref/contrib/sites/)을 사용하고 있고 각 사이트에 대해 별도의 설정 파일을 가지고 있다고 생각했습니다. . 또한 미들웨어를 사용하여 각 요청에 대해'request.urlconf'를 설정할 수 있지만'get_current_site'가 미들웨어에서 호출 가능한지 확실하지 않습니다. – evergreen