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

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 admin
admin.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 Choice

admin.site.register(Choice)
就可以看到Choice的管理页面了。

为了一次性添加多个Choice,修改admin.py,删除了Choice的register():
from django.contrib import admin
from polls.models import Choice, Poll

class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 3

class 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 sys
sys.path = sys.path[1:]
import django
print(django.__path__)"
然后改写这个base_site.html即可。

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



(十)定制管理的主页面
主页面的模板文件是admin/index.html,安装前述方法一样操作即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值