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一样,将原文件复制到新建的模板文件夹中,然后进行修改

时间: 2024-08-28 12:36:02

Django tutorial part2的相关文章

Django Tutorial 学习笔记

实际操作了Django入门教程中的范例,对一些细节有了更清晰的掌握.感觉只看文档不动手是不行的,只看文档没法真正掌握其中要素之间的关系,看了很多遍也不行,必须动手做了才能掌握.同时,这次练习在Eclipse+PyDev环境下进行,了解了这个开发环境对Django的支持情况. Django网站提供的入门教程: https://docs.djangoproject.com/en/1.6/intro/tutorial01/ 教程中的数据库结构 Poll {question, pub_date} Cho

Django tutorial part4

writing_first_django_app_part4 Write a simple form 点击每个Question进去detail界面,看到的vote我们希望以选择的形式给用户进行选择,然后将结果以表格的形式POST到服务器. # polls/templates/polls/detail.html <h1>{{ question.question_text }}</h1> {% if error_message %}<p><strong>{{ e

Django tutorial part5

writing_first_django_app_part5 Automated Testing 解决问题一个很好的方法是首先描述这个问题,然后写出代码来实现它.但是很多人习惯先写好代码然后再进行调试找问题.也许在写代码之前先写好一些测试会是更好的选择. A little bug 前面在我们的Question.was_published_recently()函数中有一个小问题,如果它是一天之内创建的则会返回True,但是如果pub_date是未来的时间也会返回True 通常应用的测试会放到tes

Django tutorial part3

writing_first_django_app_part3 在Django中,网页和其他内容都是通过views来呈现的,每个view由一个简单的python函数来表示,django通过检查url来选择一个view URL pattern: URL的简单通用形式, eg: /newsarchive/<year>/<month>/ python用'URLconfs'来将URL patterns匹配到views 先看一个简单view的例子 # polls/view.py from dj

Django tutorial part1

writing_first_django_app_part1 Creating a project 查看django版本: $ python -c "import django; print(django.get_version())" 创建工程,进入需要放置工程的目录: $ django-admin.py startproject mysite 会创建以下文件: mysite/ manage.py mysite/ __init__.py settings.py urls.py wsg

Django tutorial part6

writing_first_django_app_part6 在django中,网页应用中的一些附加文件,如image, JS, CSS等,称为静态文件"static files" django.contrib.staticfiles: 从各个应用中收集静态文件,放到一个单独的位置,方便使用和管理 Using CSS 静态文件查找路径的时候与template类似,首先在polls目录下创建目录static,在里面再创建一个polls目录,在这个polls目录里面才放置静态文件,现在创建

实战Django:Rango Part2

  在这一节,我们将学习如何用自动脚本来添加内容,然后给我们的应用添加首页和一个内容页. 9.Part1练习答案 除了加入views和likes两个字段,这里我们需要思考一个问题,用户将如何来访问我们的页面?用/rango/category/1/ 或 /rango/category/2/?他们怎么知道1代表哪个分类,2又代表哪个分类?有没有更直接一点的方法呢? 我想还是直接用分类名称来作为链接的一部分会比较好一些,比如用/rango/category/Python/来访问Python分类这样子.

Pyhon + Django 1.7.2 tutorial + virtualenv简单使用

最近换了工作, 进的team项目中大概是个python + django的组合, python本身的语法以及特性撸过一边之后,这两天按着django官方的文档倒腾了几天, 文档非常详细,本人英语水平也就那样,基本没什么压力,建议像我一样的新手直接去看官方文档,首先内容绝对是更新到了最新的版本,内容组织渐进有序,当然咯,就算按照文档一步一步来,倒腾的过程中总归会碰到些问题,这边博文权当给个记个流水账以后能翻翻或者说有更深的理解了顺便来update下,看看自己的一些思考方式,若果顺便也能给其他人带来

Django 1.6 CBVs

Django 1.6 最佳实践: 如何正确使用 CBVs (Class-based views) Class-based views是Django为解决建站过程中的常见的呈现模式而建立的. 在这节中, 我们着重讲一下CBVs的使用技巧和一般原则. 1. CBVs的使用原则 代码越少越好 永远不要重复代码 View应当只包含呈现逻辑, 不应包括业务逻辑 保持view逻辑清晰简单 不要将CBVs用作403, 404, 500的错误处理程序 保持mixin简单明了 2. 如何使用mixin 在编程中m