由於項目有通過自定義頁面來實現功能的需求,百度也查了很多資料,也沒找到合適的方法,所以決定分析源碼,通過對源碼的分析,找到了此方法。
01-需求
首先,如果要在xadmin中展示一個數據管理頁面,首先是在Django的models.py文件中創建一個Model類,
再通過adminx.py文件將創建的models注冊到xadmin中,最后在頁面上對該models對一些操作管理顯示出來。
現在我們要新增一個自定義的頁面,同樣需要在models.py文件中新增一個類,並繼承models.Model父類,
由於我們要創建的頁面並不是用於作數據管理,所以該model中不需要編寫任何的字段,直接寫它的Meta和__str__方法即可:
# 例如: class change_into(models.Model): class Meta: verbose_name = u"轉入分析" verbose_name_plural = verbose_name db_table = 'change_into' def __str__(self): return self.Meta.verbose_name class change_out(models.Model): class Meta: verbose_name = u"轉出分析" verbose_name_plural = verbose_name db_table = 'change_out' def __str__(self): return self.Meta.verbose_name
02-重寫get_context方法
# adminx.py from xadmin.views.base import CommAdminView class ChangeIntoAdmin(object): # 指向自定義的頁面 object_list_template = 'change_into.html' # 重寫方法,把要展示的數據更新到 context def get_context(self): context = CommAdminView.get_context(self) bill_message = bill_manage.objects.all() context.update( { 'title': '轉入分析', } ) return context class ChangeOutAdmin(object): object_list_template = 'change_out.html' def get_context(self): context = CommAdminView.get_context(self) bill_message = bill_manage.objects.all() context.update( { 'title': '轉出分析', 'bill_message': bill_message, } ) return context xadmin.site.register(change_into, ChangeIntoAdmin) xadmin.site.register(change_out, ChangeOutAdmin)
03-自定義的頁
# change_into.html {# 繼承xadmin的側邊欄和導航欄 #} {% extends 'xadmin/base_site.html' %} {# 去掉標簽欄 #} {% block content-nav %} {% endblock %} {% block content %} {# 要展示的數據 #} <h1>轉入分析</h1> {% for i in bill_message%} {{ i }} {% endfor %} {% endblock content %}