Django tutorial part2

writing_first_django_app_part2

Create super user

下面开始创建管理者帐号:

$ python manage.py createsuperuser

输入用户名和密码,邮箱之后创建帐号

运行runserver之后,进入http://127.0.0.1:8000/admin/ 可以登录管理界面

登录之后这时在管理界面还没能看到我们的poll应用,我们需要告诉admin我们的Question对象需要在管理界面显示,修改polls/admin.py:

from django.contrib import admin
from polls.models import Question

admin.site.register(Question)

重启服务器之后就可以看到Questions了

 
Customize the admin form

刚才的register()函数仅仅是将Question类注册,现在增加一个QuestionAdmin类在里面来自定义admin form,修改polls/admin.py:

from django.contrib import admin
from polls.models import Question


class QuestionAdmin(admin.ModelAdmin):
    fields = ['pub_date', 'question_text']

admin.site.register(Question, QuestionAdmin)

在register()函数中再增加一个参数QuestionAdmin类,由admin.ModelAdmin类继承而来,上面的修改之后将会按照fields的list里面的顺序来排列类

修改polls/admin.py,将表格分解成fieldsets:

from django.contrib import admin
from polls.models import Question


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date']}),
    ]

admin.site.register(Question, QuestionAdmin)

list中每一个tuple的第一个元素是这个fieldset的标题

collapse 有时候一些fieldset有很多不是常用的内容,可以将它初始化为收缩的:

from django.contrib import admin
from polls.models import Question

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]

只需要在那个fieldset的tuple中增加一项'classes': ['collapse'] 即可,这样需要查看这些内容时点击展开就可以查看

现在我们有了Question的管理页面,但是目前还没有展示每个Question的Choices

第一种方法同样可以像Question那样注册Choice,但是本来每个Choice是和一个Question关联的,这样管理不方便,所以可以用inline的方式来添加Choice:

# polls/admin.py

from django.contrib import admin
from polls.models import Choice, Question

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

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)

ChoiceInline类将告诉django在Question的管理页面也可以编辑Choice,默认提供3个位置,我们可以手动增加数量或者减少

 

Customize the admin look and feel

Customizing project's templates

首先在工程的根目录创建templates目录,然后在mysite/settings.py里面添加模板的目录:

TEMPLATE_DIR = [os.path.join(BASE_DIR, 'templates')]

然后在templates目录下创建目录admin,然后将系统django目录(django/contrib/admin/templates/admin/base_site.html)文件拷贝到新建的admin目录里面,如果找不到系统django的目录,可以运行下面命令:

$ python -c "
import sys
sys.path = sys.path[1:]
import django
print(django.__path__)"

然后修改模板,这里我们将管理页面上面的标题改为"Polls Administration",修改模板的代码,替换掉原来的{{site_header|default:_('Django administration')}}

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>
{% endblock %}

这里django的默认管理模板都是可以重载的,方法和刚才base_site.html一样,将原文件复制到新建的模板文件夹中,然后进行修改

posted @ 2015-03-15 16:28  Jolin123  阅读(278)  评论(0编辑  收藏  举报