Python 网站开发(三)Django 模板的使用上一篇文章中,我们创建了 blog 应用,并成功将 models.py 模块中的类导入到了 Sql Server 数据库,今天就让我们看看自动 admin 应用和模板的简单使用。 首先,需要指定一个 URL 来访问 admin ,只需将 urls.py 中自动生成的 (r'^admin/', include(admin.site.urls)), 前的 "#" 号(注释)去掉即可。这样 urls.py 中的 urlpatterns 如下: urlpatterns = patterns('', (r'^admin/', include(admin.site.urls)), ) 打开 admin 应用,出现下边的错误: 原因是 admin 应用不是 Django 中必要的组件,同配置 blog 应用一样,我们只需将 settings.py 模块 INSTALLED_APPS 中 'django.contrib.admin', 前的 "#" 号去掉即可。刷新下页面,结果如下: 发现没有出现编辑文章项,这是因为我们没有告诉 Django 要在 admin 窗口中显示哪个 model,打开 blog/models.py 文件,导入 admin 应用并注册 article ,这样 models.py 文件为: from django.db import models from django.contrib import admin class article(models.Model): title=models.CharField(max_length=50) content=models.CharField(max_length=4000) addtime=models.DateTimeField() admin.site.register(article) 这样,刷新我们的页面,结果如下: 点击 "Add" 即可发布文章,如下: 右下角有三个按钮,分别为“保存并发另一篇”、“保存并继续编辑本篇文章”和“保存”,我在这里发了三篇文章做测试。文章管理列表如下: 看起来确实不友好,不知道 Django 为什么默认会这样显示,现在就让我们改变显示方式。我们在 models.py 中添加一个 article_admin 类,并把它添加到注册代码中,如下: class article_admin(admin.ModelAdmin): list_display=('title','addtime') admin.site.register(article,article_admin) 可见,我们显示了文章的标题和发布时间,这样方便对文章的管理,我们可以进行排序等操作。到这里,我们简单了解了 admin 应用,可见对 blog 的管理还是很方便的。 接下来让我们看看 Django 中的模板,使用模板将要呈现的数据和 HTML 代码分离出来。在 "blog" 文件夹下新建 "templates" 文件夹,并在其中新建 "archive.html" 文件,这是我们的“文章归档”模板。需要注意的是 "templates" 文件夹的名字只能是这样,而模板的名字我们可以任意命名。往 blog/templates/archive.html 文件中添加如下代码: {% for m in model %} <article> <h2>{{ m.title }}</h2> <p>{{ m.addtime }}</p> <p>{{ m.content }}</p> </article> {% endfor %} 接下来在 views.py 中添加读取文章的代码,并使用模板将文章显示出来,如下: from django.template import loader,Context from django.http import HttpResponse from PythonProject.blog.models import article def archive(request): articles=article.objects.all() t=loader.get_template("archive.html") c=Context({'model':articles}) return HttpResponse(t.render(c)) 写法是很固定的,相信大家能够理解。最后在 urls.py 文件添加 archive,如下: from django.conf.urls.defaults import * from PythonProject.blog.views import archive from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)), url(r'^archive/',archive), ) 到这里,我们所做的工作显示如下: 结果是有了,但离我们一个像样的 blog 还很远。鉴于很多页面有相同的共用部分,我们创建一个基础模板。在这里为节省时间,我直接将东奎博客中的公用部分拿过来了,在 templates 文件夹下新建 "base.html" 公用模板,内容如下: <!DOCTYPE html> <html> <head> <link rel="stylesheet" type="text/css" href="/static/admin/css/Site.css" /> <!--[if lt IE 9]> <script src="http://html5shiv./svn/trunk/html5.js"></script> <![endif]--> </head> <body id="archive"> <div id="wrapper"> <header> <a id="logo" href="/">Python001</a> </header> <nav> <ul> <li><a class="home" href="/">Home</a></li> <li><a class="archive" href="/archive/">Archive</a></li> </ul> </nav> <section id="container" class="group"> <section id="left"> {% block content %} {% endblock %} </section> <aside id="right"> </aside> </section> <footer> </footer> </div> </body> </html> 接下来,我们修改 "archive.html" 模板为: {% extends "base.html" %} {% block content %} {% for m in model %} <article> <h2>{{ m.title }}</h2> <p>{{ m.addtime }}</p> <p>{{ m.content }}</p> </article> {% endfor %} {% endblock %} 刷新我们的页面,可以看到现在的效果好多了,如下: 限于篇幅,对 Django 中的模板使用我们会再花一篇的内容来做个介绍,如在图中时间格式的转换、文章排序等一些技巧。同时需要说明的是,文中没有过多的进行细节的解释,可能需要读者对 Python 语言有一定的了解,如元组、引入模块等等概念。 7 顶
作者:东奎 发布时间:2011年07月20日 |
|