1. 程式人生 > >Django Xadmin自定義頁面深度定製

Django Xadmin自定義頁面深度定製

xadmin作為Django的一種後臺管理框架,給我們提供了非常靈活的外掛機制。除了我們在官網中可以看到的Xadmin plugin,包括Action、data filters、圖表外掛、書籤、資料匯出功能等,我們還可以通過繼承它的BaseAdminPlugin父類來進行更強大的定製。由於在工作中的實際開發時,發現關於這方面的介紹除了官方文件和一些對官方文件進行翻譯的文章外,其他對此介紹的較少,因此記錄了一些自定義外掛的使用心得。

當然,本篇對xadmin的自定義頁面定製並沒有使用到BaseAdminPlugin類

在一些特殊的需求中,當我們對xadmin的資料管理平臺有一些更加個性化的需求時,xadmin自帶的預設外掛可能就滿足不我們了。如我們都知道xadmin是一個數據管理平臺,但現在的需求是需要在這個資料管理平臺中嵌入一些非資料頁面,比如輸入框、表單等,我們就需要自己手動對xadmin進行擴充套件。首先,如果要在xadmin中展示一個數據管理頁面,首先是在Django的models.py檔案中建立一個Model類,再通過adminx.py檔案將建立的models註冊到xadmin中,最後在頁面上對該models對一些操作管理顯示出來。現在我們要新增一個自定義的頁面,同樣需要在models.py檔案中新增一個類,並繼承models.Model父類,由於我們要建立的頁面並不是用於作資料管理,所以該model中不需要編寫任何的欄位,直接寫它的Meta和unicode方法即可:

class Test(models.Model):

    class Meta:
        verbose_name = u"自定義頁面"
        verbose_name_plural = verbose_name

	def __unicode__(self):
        return self.Meta.verbose_name

接下來,在adminx.py檔案中對我們剛剛建立的Test model編寫相應的TestAdmin:

class TestAdmin(object):
	list_display = []
	object_list_template = "test.html"

list_display屬性原本是用於設定xadmin的頁面上預設顯示哪些表字段,這裡的內容為空。這裡需要注意的是,我們還重寫了它的object_list_template屬性。該屬性正是原有的資料展示頁面模版。當我們將它設定為“test.html”時,在xadmin的管理頁面上,它不會再顯示原有的資料管理頁面,而是顯示我們自定義的"test.html"頁面。在xadmin的原始碼list.py檔案中,一般用於控制資料展示的是ListAdminView類,該類也有一個object_list_template屬性預設為None,現在我們可以在我們自己編寫的TestAdmin中對該屬性進行指定,最後通過xadmin.site.register將該admin類與我們的model關聯起來。

最後我們開啟xadmin的管理頁面就可以看到,“自定義頁面”的Tab顯示的已經不再是原來的資料管理頁面了,而是我們自定義編寫的test.html頁面的內容,到此,就完成了對xadmin自定義頁面的效果。