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自定义页面的效果。