由于项目有通过自定义页面来实现功能的需求,百度也查了很多资料,也没找到合适的方法,所以决定分析源码,通过对源码的分析,找到了此方法。
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 %}