Django学习--Writing your first Django app(5)
中间还有自动化测试和自定义CSS的部分被我先忽略了,最后一块是讲自定义admin后台的内容的.
代码同步在github上mysite-part5
开始
在一开始的时候,我们把Question引入了admin模块,如果我们需要对字段进行更改的话,可以在admin.py文件中自己来定义,比如字段的顺序:
1 | class QuestionAdmin(admin.ModelAdmin): |
这样就可以交换2个字段的位置了~
如果说表单的字段很多的话,可能就需要分块来处理了,这时候就可以这么写:
1 | class QuestionAdmin(admin.ModelAdmin): |
这样就把字段分成了空和Date information两个部分,显示的效果就是这样的:
把Choice添加进来!
如果我们需要在admin里面修改choice,当然需要把它添加进来,简单的方法,可以直接admin.site.register(Choice)
这样就可以最简单的将其引入,但是我们要注意到一个问题,那就是choice和Question是有外键关联的,我们应该是对对应的Question来添加choice,虽然上述的代码也可以实现这一功能,但是不够直观,而且比较麻烦. 我们可以用下面的方法来实现:
1 | class ChoiceInline(admin.StackedInline): |
我们在这里添加了一个ChoiceInline的类,设置对应的model为Choice,extra属性表示在页面上显示几条信息,效果如下:
这样的效果已经达到了我们的预期,修改起来已经很简便了.
我们也可以更改一下显示的样式,比如:class ChoiceInline(admin.TabularInline):
这样的:
改变Question为列表显示
只要在QuestionAdmin类中添加一行:
list_display = ('question_text', 'pub_date')
就可以显示成列表的样式了,当然我们也可以把里面的方法显示出来,比如:
list_display = ('question_text', 'pub_date', 'was_published_recently')
就可以让Question显示成如下的样子:
我们还可以用下面的代码让样式变得更好看,并且变得可以排序:
1 | def was_published_recently(self): |
我们还可以添加一个list_filter属性来对日期进行筛选:list_filter = ['pub_date']
效果如下:
我们还可以在里面增加一个搜索框:search_fields = ['question_text']
自定义admin外观
我们需要在项目目录下创建一个template文件夹(和manage.py同级),然后修改settings.py文件的TEMPLATES属性的DIRS字段,修改之后如下:
1 | TEMPLATES = [ |
这样,django就可以识别并且读取到templates文件夹了,接着在templates文件夹里创建一个admin文件夹,把django/contrib/admin/templates目录下的admin/base_site.html文件拷贝到刚才新建的admin文件夹中.
查看Django文件的路径:
python -c "import django; print(django.__path__)"
然后把base_site.html文件中的{'{ site_header|default:_('Django administration') }' }
改成例如Polls Administration,就可以在admin后台看到页面上的管理后台名称已经变成了Polls Administration.
这是最简单的修改admin的样式的方法,我们还可以自己来增加更多的模板文件来替换各种样式.
总结
这一节的主要内容就是自定义admin的各种信息,对于admin模块的使用有一个初步的了解,在这一部分之后,我们已经有了初步使用Django的基础,用这点知识,搭建一个例如个人博客也已经不是问题了.~