2017-10-05 24 views
1

私のサイトの管理者にID 1を表示します。 他のビューでは、これをdispatchに定義しましたが、これを行う方法が見つかりませんでした管理者サイトID 1のdjango管理者のみ許可する

私は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_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

私がフォローしているかどうかはわかりません。すべてのサイトで同じ設定ファイルが使用されています。すべてのサイトに同じビューとモデルがあります。 1つのサイトに対して別個の設定ファイルをどうすればできますか? – guival

+0

申し訳ありません。私はあなたがDjangoのオプション部分であり、サイトごとに別々の設定ファイルを持っている[Sites Framework](https://docs.djangoproject.com/en/1.11/ref/contrib/sites/)を使っていると思いました。ミドルウェアを使ってリクエストごとに 'request.urlconf'を設定することもできますが、' get_current_site'がミドルウェアから呼び出すことができるかどうかはわかりません。 – evergreen

関連する問題