About
RSS

Bit Focus


django 架设网站入门指南[贰]

Posted at 2010-02-04 10:14:52 | Updated at 2018-05-25 13:32:58

上节回顾 – ORM 和数据库

创建 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'),
)
    因为是应用, 所以呢, 还得去 settings.py 登记
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',
    'guestbook.home',
)
    最后要记得执行数据库同步来创建 admin 相关的表
$ 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

    虽然说是应用, 但是 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'}),
)
    这个告诉服务器, 如果遇到 static/ 下的内容, 则去 guestbook/static 目录下去找. 同样注意, 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 %}
    这样就好了. 试试新的首页吧.

Post tags:   django  Tutorial  Web Server  Python

Leave a comment:




Creative Commons License Your comment will be licensed under
CC-NC-ND 3.0


. Back to Bit Focus
NijiPress - Copyright (C) Neuron Teckid @ Bit Focus
About this site