创建 admin
应用
打开 guestbook/urls.py 仔细研究一下注释, 会看到有几行写着, 取消注释来激活 admin. django 的 admin 应用是一个非常不错的后台. 现在就来开启它吧from django.conf.urls.defaults import *
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Example:
# (r'^guestbook/', include('guestbook.foo.urls')),
# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
# to INSTALLED_APPS to enable admin documentation:
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
(r'^admin/', include(admin.site.urls)),
(r'^$', 'guestbook.home.views.display'),
(r'^echo/$', 'guestbook.home.views.echo'),
(r'^save/', 'guestbook.home.views.save_message'),
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'guestbook.home',
)
$ guestbook/manage.py syncdb
现在转到 http://localhost:8000/admin/ 会看到登录提示页面啦. 现在填入第一次 syncdb 时输入的帐号密码就能登入了. 不过现在的 admin 还很挫, 甚至不能管理留言. 进入 guestbook/home 目录, 创建 admin.py 源文件, 加入如下内容
from guestbook.home.models import Message
from django.contrib import admin
admin.site.register(Message)
定制 admin
虽然说是应用, 但是 admin 真身藏在哪里呢? 怎么去修改它呢? 答案是, 它是 django 内置应用, 要修改它, 只要将它的真身拷贝一份到 guestbook 目录下就行了. 而 admin 目录一般会窝在 /usr/share/ 目录下的某个地方, 看看 admin 页面的源代码, 注意里面提及了一个叫做 base.css 的文件. ok, 现在按图索骥$ find /usr/share -name base.css
如果这还没找到, 试试干脆在根目录下搜索好了. 在我的机器上, admin 目录在
/usr/share/pyshared/django/contrib/admin/
将 admin/templates/ 下的两个目录复制到 views 下面, 如
$ cp -r /usr/share/pyshared/django/contrib/admin/templates/* guestbook/views/
现在编辑 guestbook/views/admin/base_site.html, 将
Django administration
改成 Guestbook administration
{% extends "admin/base.html" %}
{% load i18n %}
{% block title %}{{ title }} | {% trans 'Django site admin' %}{% endblock %}
{% block branding %}
<h1 id="site-name">{% trans 'Guestbook administration' %}</h1>
{% endblock %}
{% block nav-global %}{% endblock %}
支持静态文件
所谓静态文件, 指的是如 css, javascript, favicon 或图像等非动态生成的文件. 访问静态文件, 秘诀同样在 urls.py 中. 打开它, 加入一项urlpatterns = patterns('',
# Example:
# (r'^guestbook/', include('guestbook.foo.urls')),
# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
# to INSTALLED_APPS to enable admin documentation:
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
(r'^admin/', include(admin.site.urls)),
(r'^$', 'guestbook.home.views.display'),
(r'^echo/$', 'guestbook.home.views.echo'),
(r'^save/', 'guestbook.home.views.save_message'),
(r'^static/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': 'guestbook/static'}),
)
(?P<path>.*)
, 前面的 ?P<path>
(注意大小写) 表示将有一个名为 path
的参数传递给 django.views.static.serve
函数, 而参数的值是后面的 .*
, 即 python 正则式中, 任意字符串.行动起来, 先在 guestbook 下建立一个 static 目录, 扔个 test.css 进去, 内容
h1 { text-align: center; }
然后改改 guestbook/views/home.html
<html>
<link rel="stylesheet" type="text/css" href="/static/test.css">
<body>
<h1>Guestbook</h1>
{% if messages %}
{% for msg in messages %}
{% if msg.name %}
<b>{{ msg.name }}</b>
{% else %}
<i>匿名人</i>
{% endif %}
在 {{ msg.dt|date:"D d M Y H:i:s" }}
{% if msg.content %}
写道 {{ msg.content }}
{% else %}
打了一瓶酱油就走了
{% endif %}
<br>
{% endfor %}
{% endif %}