我正在爲Django 1.7項目創建一個管理界面/儀表板。我試圖使用Django的內置管理站點,而不是從頭創建一個新的管理應用程序。我有「root」(超級用戶)和「審閱者」(非超級用戶)員工賬戶。這兩個帳戶都在默認的「管理員」組中。這兩個帳戶都可以登錄到管理網站,但有些頁面可以被root用戶和審閱者帳戶訪問,而對其他用戶的訪問僅限於超級用戶。我創建了以下兩個觀點:使用Django「is_superuser」是否需要額外的URL?
# mysite/apps/admin/views.py
from django.shortcuts import render
from django.contrib.auth.decorators import user_passes_test
@user_passes_test(lambda u: u.is_staff)
def all_admins(request, template):
return render(request, template)
@user_passes_test(lambda u: u.is_superuser)
def superuser_only(request, template):
return render(request, template)
我遇到的問題是,如果我登錄使用審覈帳戶,然後單擊錨的「superuser_only」頁面中,我得到以下錯誤:
Page not found (404)
Request Method: GET
Request URL: http://localhost:8001/accounts/login/?next=/admin/super/
Using the URLconf defined in conf.urls, Django tried these URL patterns, in this order:
^admin/
^admin/all_admins/$ [name='all-admins']
^admin/super/$ [name='superuser-only']
The current URL, accounts/login/, didn't match any of these.
有沒有別的東西,我必須這樣做,如果審閱點擊該鏈接不會出現此錯誤來實現這個只有超級用戶視圖和模板?
我遵循Django docs instructions,在我的mysite/apps/admin/templates/admin目錄中創建了自己的Django base.html,base_site.html和index.html模板副本,然後添加了「all_admins」和「superuser_only 「錨定在index.html頁面的底部。
這裏是我的文件:
# part of mysite/mysite/settings.py
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'apps/admin/templates'),
os.path.join(BASE_DIR, 'apps/admin/templates/admin'),)
# mysite/mysite/urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^admin/all_admins/$',
'apps.admin.views.all_admins',
{'template': 'all_admins.html'},
name='all-admins'),
url(r'^admin/super/$',
'apps.admin.views.superuser_only',
{'template': 'superuser_only.html'},
name='superuser-only'),
)
很好。這實際上起作用,它可以防止顯示錯誤,但如果我以審閱者的身份登錄,並且現在單擊「超級用戶」鏈接,則不會發生任何事情。我想至少顯示一個模板,告訴審閱者他們需要成爲超級用戶才能訪問該頁面。也許我必須將視圖中的「is_superuser」變量傳遞給模板,並且只顯示指向不需要查看器成爲超級用戶的頁面的鏈接?這會讓我解決問題。 – William 2015-02-11 01:40:02
我不太明白。這是什麼文件?如果我把它放在「登錄」中。我的mysite/apps/admin/templates/admin目錄中的「html」文件中,我在login.html文件中的「{%extends ...%}標記中收到錯誤」調用Python對象時超出最大遞歸深度「創建。 – William 2015-02-11 02:36:51
你不應該創建'admin/login.html'模板。創建您自己的模板並從'login.html'擴展它。然後配置'admin.site'來使用你的模板而不是'admin/login.html'。查看更新後的答案。 – catavaran 2015-02-11 02:51:55