分享

(转)Python 网站开发(三)Django 模板的使用-东奎博客

 豆芽爱尚阅 2015-03-31

Python 网站开发(三)Django 模板的使用

分类:Python, Django
百度分享 0

上一篇文章中,我们创建了 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 应用,出现下边的错误:

Python admin 应用错误

原因是 admin 应用不是 Django 中必要的组件,同配置 blog 应用一样,我们只需将 settings.py 模块 INSTALLED_APPS 中 'django.contrib.admin', 前的 "#" 号去掉即可。刷新下页面,结果如下:

Python 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)

这样,刷新我们的页面,结果如下:

Python admin

点击 "Add" 即可发布文章,如下:

Python admin 应用

右下角有三个按钮,分别为“保存并发另一篇”、“保存并继续编辑本篇文章”和“保存”,我在这里发了三篇文章做测试。文章管理列表如下:

Python admin 管理

看起来确实不友好,不知道 Django 为什么默认会这样显示,现在就让我们改变显示方式。我们在 models.py 中添加一个 article_admin 类,并把它添加到注册代码中,如下:

class article_admin(admin.ModelAdmin):
    list_display=('title','addtime')
admin.site.register(article,article_admin)

修改 Python 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),
)

到这里,我们所做的工作显示如下:

Django 模板的使用

结果是有了,但离我们一个像样的 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 %}

刷新我们的页面,可以看到现在的效果好多了,如下:

Python 公用模板的使用方法

限于篇幅,对 Django 中的模板使用我们会再花一篇的内容来做个介绍,如在图中时间格式的转换、文章排序等一些技巧。同时需要说明的是,文中没有过多的进行细节的解释,可能需要读者对 Python 语言有一定的了解,如元组、引入模块等等概念。

7

作者:东奎 发布时间:2011年07月20日
原文:Python 网站开发(三)Django 模板的使用
版权所有,转载时必须以链接形式注明作者和原出处并保留本声明。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多