您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页自定义Django的admin界面

自定义Django的admin界面

来源:化拓教育网
⾃定义Django的admin界⾯

The Django Book:第18章 ⾃定义Django的admin界⾯

第6章介绍了Django的admin界⾯,现在是回过头来仔细看看这个的时候了

我们前⾯讲的⼏次admin是Django的\"杀⼿级特性\",并且⼤多数Django开发⼈员很快爱上了它节省时间的所有特性这样⾃然⽽然的⼤部分Django开发⼈员开始寻找⾃定义或者扩展admin的⽅法

第6章最后⼏部分讲到了⼀些定制admin界⾯某⼀部分的简单⽅法,重新阅读⼀下那些资料是个好主意它讲述了⼀些定制admin的更改列表,编辑表单以及logo等等的简单⽅法

第6章也讨论了何时和为什么你想使⽤admin界⾯,这些资料跳跃到了其他章节,我们这⾥重新介绍⼀下:

显然,admin对编辑数据⾮常有⽤(fancy that),如果你有⼀些录⼊数据的任务,则admin不可能被其它东西打败我们料想⼤多数本书的读者都将有很多数据录⼊的任务

Django的admin在⾮技术⽤户需要录⼊数据时特别闪耀,这是这个特性的最初起源尽管如此,我们发现除了显⽽易见的数据录⼊任务,admin也在下⾯⼀些情况下有⽤:

1,检查数据模型,我们定义了⼀个新模型后第⼀件事就是在admin⾥调⽤它并输⼊⼀些模拟数据,这对我们发现数据模型的错误并有⼀个图形界⾯来显⽰这些错误很有帮助

2,管理必须的数据,对于chicagocrime.org来说很少有数据录⼊的任务,因为它的数据都来⾃于⼀个⾃动的数据源尽管如此,当⾃动获取数据的模块出问题时,通过admin可以轻松的编辑数据,这是很有⽤的

Django的admin不需要或者需要很少配置就可以处理这些常见的情况,但是,处理这些常见的情况如此的好意味着Django的admin在处理其它情形时不⼀定很好

我们后⾯将谈到Django的admin不适合做的⼀些事情,但是现在我们先离题来看看它的⼀些哲学:

admin的禅宗

作为它的核⼼,Django的admin设计⽤来为如下的⼀个单独的活动:受信任的⽤户编辑结构化的内容

是的,很简单,但是这简单的⼀⾏隐藏着很多内容,Django的admin的整个哲学都基于此让我们深⼊了解这个句⼦的⼦内容:\"受信任的⽤户\"

admin设计来被你(开发者)信任的⼈⽤,这不仅仅表⽰那些被授权的⽤户,它表⽰Django假设你的内容编辑者可以被信任来做正确的事情,这意味着编辑内容没有批准的过程,如果你信任你的⽤户,没有⼈需要对编辑的批准这也表明了权限系统不⽀持基于⼀个对象的访问

如果你信任某⼈来编辑他⾃⼰的故事,你也将信任他不会在没有权限的情况下编辑别⼈的故事\"编辑\"

Django的admin的⾸要⽬的是让⼈们编辑内容,这最初看起来很显⽽易见,但是也存在⼀些细⼩⽽强⼤的影响例如,尽管admin对重新视查数据很有⽤,但是它不是设计来⼲这个的,注意缺少\"can view\"权限(参考第12章)Django假设如果⽤户被允许在admin⾥查看内容,他们也被允许编辑它

另外⼀个很值得注意的地⽅是admin缺少⼀些例如\"⼯作流\"的东西,如果⼀些任务需要⼏步来完成,admin不⽀持特别的顺序来做这件事情,admin关注于编辑,⽽不是围绕编辑的其它活动

对于⼯作流的缺乏⽀持也起源于信任的原则,admin的哲学是,⼯作流属于个⼈问题,⽽不应该⽤代码实现最后,注意admin缺乏统计的⽀持,它不⽀持显⽰总数,平均数等等

再⼀次说明,admin是⽤来编辑的,它期望你写⾃定义的视图来完成其它的任务\"结构化的内容\"

因为Django其它部分的关系,admin希望你与结构化的数据⼯作,这样,admin仅仅⽀持编辑⽤Django模型存储的数据对于其它形式的数据,你则需要⾃定义视图总结

现在应该很清楚了,Django的admin不是给任何⽤户来做任何事情的,⽽是牢牢的关注⼀点并且把这⼀点做的⾮常好当我们需要扩展Django的admin时,同⼀哲学的⼤部分内容存在与此(注意扩展性⽆处不在)

因为⾃定义的Django视图可以做任何事情,⽽且它们可以可视化的集成到admin(参看下⾯内容),内建的定制admin的机会在⼀定程序上被设计所

定制admin模板

我们下⾯将看到,你有⼏种⼯具来定制内建的admin模板,但是对于其它任务,例如需要⾃定义⼯作流或者细粒度权限你将需要阅读本章末尾讲到的定制admin视图

现在我们来看看快速定制admin的外观和⾏为,第6章讲到了⼀些常见的任务,如更改logo样式和提供⾃定义admin表单就这点来说,我们通常需要更改⼀个特殊项的⼀些模板

admin的每⼀个视图,如更改列表,编辑表单,删除确认页⾯,历史视图等都有⼀个分配的模板⽽这个模板可以通过⼏种⽅式来覆盖

⾸先,你可以全局覆盖模板,admin视图使⽤标准模板载⼊机制来寻找模板,所以如果你在你的模板⽬录⾥创建模板Django将载⼊并使⽤这些模板⽽不是使⽤Django绑定的默认admin模板这些全局模板如下:视图 基本模板名

更改列表 admin/change_list.html

增加/编辑表单 admin/change_form.html删除确认 admin/delete_confirmation.html对象历史 admin/object_history.html

尽管如此,⼤多数情况下你只想更改⼀个单独的对象或者app的模板⽽不是全局的模板

这样的话,每个admin视图⾸先寻找模型和app专有的模板,这些视图按下⾯的顺序寻找模板:

admin///