天天看點

Django xadmin自定義頁面

django自帶的admin因為功能和樣式比較簡陋,是以很多程式員選擇第三方背景xadmin做背景,但是xadmin的自帶管理頁面非常有限,有時我們也想自己定制一些功能頁面,網上關于這個需求的教程實在是太少了,或者講得實在是很模糊,經過我自己的一些摸索後現在來談一下我總結的經驗,我遇到的坑都用會在注釋裡寫命

(此定制頁面非xadmin添加插件式定制,而是添加路由,并通過view,和自定義html模闆生成自定義頁面)

第一步需要在左邊側欄添加需要的菜單

Django xadmin自定義頁面

在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 %}
           

大功告成~~~~

Django xadmin自定義頁面

最後有人會問為什麼會有個空白的框框

Django xadmin自定義頁面

這個是xadmin自帶的model字段篩選器的框框,但是因為是自定義頁面,是以并沒有需要篩選的東西,是以空了,但是完全不影響我們的使用,至于怎樣取消掉它,我暫時沒找到方法.

還有就是:我按照以上方法添加自定義頁面後,并不如上圖介紹一樣順利,而是出現了“你無權修改任何東西”的提示:如下圖:

Django xadmin自定義頁面

求解。。。。。。