码迷,mamicode.com
首页 > 其他好文 > 详细

django官方文档1.6学习笔记-编写你的第一个django程序<2>

时间:2015-04-15 19:45:48      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

  1. 写几个有用的视图   

    每个视图负责做两件事情,返回一个HttpResponse对象包含被请求的页面的内容,或者抛出一个异常,例如Http404。剩下的视图做什么取决于你自己。

    你的视图可以从数据库中读记录,或者不读。可以利用一个模板系统比如django自带的或者第三方的Python模板系统,或者不用。可以实时生成一个pdf文件,输出XML,创建一个ZIP压缩包。所有你想做的一切都可以做,使用任何你想使用python类库。

    方便起见,我们使用django自带的数据库API,让我们简单的看一个index()这个视图,这个视图用来展示最新的5条逗号分割的,根据出版时间排序的questions。

    from django.http import HttpResponse

    from polls.models import Poll

    def index(request):

        latest_poll_list = Poll.objects.order_by(‘-pub_date‘[:5])

        output = ‘,‘.join([p.question for p in latest_poll_list])

        return HttpResponse(output)

    这里有一个问题,页面的设计是被硬编码在视图内了。如果你想改变页面的外观,你将不得不修改这个视图的代码。所以我们使用django的模板系统通过创建一个视图可使用的模板,来进行视图和页面分离设计。

    首先,创建一个名字为templates的文件夹在你的polls文件夹中。django将从templates中寻找模板。

    django 的TEMPLATE_LOADERS配置包含一知道怎么从各种来源中导入模板的可调用的列表。其中一个默认的加载器是 django.template.loaders.app_drectories.Loader,这个加载器从INTALLED_APPS安装的每个 app的子目录中寻找"templates"文件夹,这是为什么django知道怎么寻找polls的templates文件夹,即使我们不修改 TEMPLATE_DIRS

    我么可以把所有的模板放在一个大的templates文件夹中,并且这样也能一样出色的工作。但是这些模板属于polls这个app,所以不象我们先前创建的admin这个app的templates,我们将把这个template放在app的templates

    在我们刚创建的templates文件夹中,创建另一个文件夹polls,在该polls文件夹下创建index.html.polls/templates/polls/index.html。因为app_directories模板加载器的工作原理,你可以在django中以polls/index.html的方式进行引用。

  2. 模板命名空间:
    现在我们可以直接把我们的模板放进polls/templates,而不是创建另一个polls子目录。但是这个帧的是一个坏主意。Django将选择名字匹配的第一个模板,如果你有一个同名的模板在其他app中,django将不能区分他们,。

    我们需要能找出所需要的那个模板,最简单的途径,就是通过给模板命名(namespace),也就是说通过把这些模板放进另外命名为应用本身的文件夹中。

    That is, by putting those templates inside another directory named for the application itself.

  3. 把下面的代码谢晋index.html中

    {%if latest_poll_list%}

        <ul>

        {%for poll in latest_poll_lis%}

            <li><a href="/polls/{{poll.id}}/">{{poll.question}}</a></li>

        {%endfor%}

    {%else%}

        <p>No polls ate available</p>

    {%endif%}

  4. 现在让我们修改下视图中的代码

    from django.http import HttpResponse

    from django.template import RequestContext,loader

    from polls.models import Poll

    def index(request):

        latest_poll_list = Poll.objects.order_by("-pub_date")[:5]

        template = loader.get_template("polls/index.html")

        content = RequestContext(request,{

            ‘latest_poll_list‘:latest_poll_list,

        })

        return HttpResponse(template.render(context))

django官方文档1.6学习笔记-编写你的第一个django程序<2>

标签:

原文地址:http://my.oschina.net/u/2322561/blog/402040

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!