django1.5 官方文档阅读笔记(二)

来源:互联网 发布:2017淘宝恶意退款教程 编辑:程序博客网 时间:2024/05/18 15:07

Writing your first Django app, part 2

这一节主要是讲Django自动生成后台管理网页。

(一)激活管理页面
Django的管理页面默认是不能用的,为了激活管理页面,需要做如下三件事:
1、在INSTALLED_APPS中反注释掉(uncomment) django.contrib.admin
2、运行 python manage.py syncdb ,因为你增加了一个新的应用,所以要更新数据库
3、编辑mysite/urls.py文件,然后反注释引用到admin的行,总共有三处,最后的urls.py应该像这样:
from django.conf.urls import patterns, include, url# Uncomment the next two lines to enable the admin:from django.contrib import adminadmin.autodiscover()urlpatterns = patterns('',    # Examples:    # url(r'^$', '{{ project_name }}.views.home', name='home'),    # url(r'^{{ project_name }}/', include('{{ project_name }}.foo.urls')),    # Uncomment the admin/doc line below to enable admin documentation:    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),    # Uncomment the next line to enable the admin:    url(r'^admin/', include(admin.site.urls)),)

(二)启动服务器
启动服务器:
python manage.py runserver

然后打开网页,输入http://127.0.0.1:8000/admin/,就会看到如下页面:


(三)进入管理网页

然后输入用户名和密码,这里的用户名和密码是我们在第一节创建superuser中的用户名和密码:


(四)让我们的Poll应用也可以加入到管理页面

我们需要告诉管理员Poll对象也有一个管理接口,我们编辑polls/admin.py,改成如下:


重启服务器,再打开刚才的网站,就可以看到Poll对象了


(五)使用admin的功能(略)

(六)定制管理页面

改变编辑页面的属性的顺序:
修改polls/admin.py文件,改为下面的:


创建一个admin的类,作为register的第二个参数,这样的话,poll类的属性顺序就改变了:


我们经常会遇到多个属性,我们可以将他们分为fieldset:
class PollAdmin(admin.ModelAdmin):    fieldsets = [        (None,               {'fields': ['question']}),        ('Date information', {'fields': ['pub_date']}),    ]admin.site.register(Poll, PollAdmin)
再次打开Poll页面:


同时可以设置class的collapse属性,将某个fieldset折叠起来:


(七)添加相关对象
虽然我们有了Poll的管理页面,但是一个Poll对于多个Choice,当前的页面并没有看到Choice。
有2种方法解决这个问题,第一种是像注册Poll一样注册一个Choice

from polls.models import Choiceadmin.site.register(Choice)
就可以看到Choice的管理页面了。

为了一次性添加多个Choice,修改admin.py,删除了Choice的register():
from django.contrib import adminfrom polls.models import Choice, Pollclass ChoiceInline(admin.StackedInline):    model = Choice    extra = 3class PollAdmin(admin.ModelAdmin):    fieldsets = [        (None,               {'fields': ['question']}),        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),    ]    inlines = [ChoiceInline]admin.site.register(Poll, PollAdmin)
以上的目地是告诉Django:Choice对象是在Poll对象的页面上进行编辑,现在看下添加Poll的页面:

可以看到,Choice可以在Poll页面进行添加了。


同时,为了减小占用的页面空间,Django提供了另一种叫做TabularInline样式的布局:
class ChoiceInline(admin.TabularInline):    #...
结果如下所示:



(八)定制admin change list
默认,Django显示每个对象的str()值,但是我们有时需要显示对象的所有属性,为了达到这个目的,需要使用list_display这个选项,如下:
class PollAdmin(admin.ModelAdmin):    # ...    list_display = ('question', 'pub_date', 'was_published_recently')
页面效果如下所示:


同时,可以增加一些特性:
class Poll(models.Model):    # ...    def was_published_recently(self):        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)    was_published_recently.admin_order_field = 'pub_date'    was_published_recently.boolean = True    was_published_recently.short_description = 'Published recently?'
同时增加Filters to PollAdmin:
list_filter = ['pub_date']
结果如下:

可以根据日期进行筛选。

我们也可以为某个域添加搜索功能:
search_fields = ['question']
这样在顶部产生一个搜索框,根据question的内容进行搜索。

也可以加入一个按照日期继承结果排序的功能:
date_hierarchy = 'pub_date'

(九)定制管理页面的外观

定制项目的模板

在你的项目目录下创建一个模板的文件夹。打开mysite/setting.py ,添加模板的目录:
TEMPLATE_DIRS = (    '/path/to/mysite/templates', # Change this to your own directory.)

然后将Django的默认模板拷到自己项目的template文件夹下:


如果找不到Django目录的话,可以使用如下方法:
python -c "import syssys.path = sys.path[1:]import djangoprint(django.__path__)"
然后改写这个base_site.html即可。

Django的任何默认管理页面的模板都可以被重写,我们只需要将模板文件从Django目录拷贝到我们项目的目录,然后修改即可。



(十)定制管理的主页面
主页面的模板文件是admin/index.html,安装前述方法一样操作即可。
原创粉丝点击