django自帶的admin因為功能和樣式比較簡陋,是以很多程式員選擇第三方背景xadmin做背景,但是xadmin的自帶管理頁面非常有限,有時我們也想自己定制一些功能頁面,網上關于這個需求的教程實在是太少了,或者講得實在是很模糊,經過我自己的一些摸索後現在來談一下我總結的經驗,我遇到的坑都用會在注釋裡寫命
(此定制頁面非xadmin添加插件式定制,而是添加路由,并通過view,和自定義html模闆生成自定義頁面)
第一步需要在左邊側欄添加需要的菜單
在adminx.py下添加以下代碼# 設計左側菜單
class GlobalSetting(object): #名稱不能改
def get_site_menu(self): #名稱不能改
return [
{
'title': '測試的',
'icon': 'fa fa-bar-chart-o',
'menus': (
{
'title': '測試子菜單1', #這裡是你菜單的名稱
'url': '/xadmin/test_view', #這裡填寫你将要跳轉url
'icon': 'fa fa-cny' #這裡是bootstrap的icon類名,要換icon隻要登入bootstrap官網找到icon的對應類名換上即可
},
{
'title': '測試子菜單2',
'url': 'http://www.taobao.com',
'icon': 'fa fa-cny'
}
)
}
]
#注冊你上面填寫的url
from .views import TestView #從你的app的view裡引入你将要寫的view,你也可以另外寫一個py檔案,把背景的view集中在一起友善管理
xadmin.site.register_view(r'test_view/$', TestView, name='for_test')
#注冊GlobalSetting
from xadmin.views import CommAdminView
xadmin.site.register(CommAdminView, GlobalSetting)
此時你重新運作一下django側欄就會出現你自定義的菜單了
第二步寫view
這個view你可以寫在一個另外獨立的py檔案裡面,這樣友善以後管理,但是我這次比較懶是以直接寫在app的view裡面
from xadmin.views import CommAdminView
class TestView(CommAdminView):
def get(self, request):
context = super().get_context() # 這一步是關鍵,必須super一下繼承CommAdminView裡面的context,不然側欄沒有對應資料,我在這裡卡了好久
title = "測試子菜單1" #定義面包屑變量
context["breadcrumbs"].append({'url': '/cwyadmin/', 'title': title}) #把面包屑變量添加到context裡面
context["title"] = title #把面包屑變量添加到context裡面
#下面你可以接着寫你自己的東西了,寫完記得添加到context裡面就可以了
.........
return render(request, 'test.html', context) #最後指定自定義的template模闆,并傳回context
第三步自定義template模闆
最後自定義template隻要把xadmin的基礎模闆繼承起來就可以愉快自己定制頁面了
{% extends 'xadmin/base_site.html' %}
{% block content %}
test
{% endblock %}
大功告成~~~~
最後有人會問為什麼會有個空白的框框
這個是xadmin自帶的model字段篩選器的框框,但是因為是自定義頁面,是以并沒有需要篩選的東西,是以空了,但是完全不影響我們的使用,至于怎樣取消掉它,我暫時沒找到方法.
還有就是:我按照以上方法添加自定義頁面後,并不如上圖介紹一樣順利,而是出現了“你無權修改任何東西”的提示:如下圖:
求解。。。。。。