标签:
写几个有用的视图
每个视图负责做两件事情,返回一个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的方式进行引用。
模板命名空间:
现在我们可以直接把我们的模板放进polls/templates,而不是创建另一个polls子目录。但是这个帧的是一个坏主意。Django将选择名字匹配的第一个模板,如果你有一个同名的模板在其他app中,django将不能区分他们,。
我们需要能找出所需要的那个模板,最简单的途径,就是通过给模板命名(namespace),也就是说通过把这些模板放进另外命名为应用本身的文件夹中。
That is, by putting those templates inside another directory named for the application itself.
把下面的代码谢晋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%}
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