Django自学习4

来源:互联网 发布:tensorflow slim 编辑:程序博客网 时间:2024/06/13 01:10

编辑Django应用

  • 博客首页 —— 显示最新发表的博客。
  • 博客“详细”页面 —— 单篇博客的固定链接页面。
  • 基于年份的归档页面 —— 显示某给定年份里所有月份发表过的博客。
  • 基于月份的归档页面 —— 显示在给定月份中发表过博客的所有日期。
  • 基于日期的归档页面 —— 显示在给定日期中发表过的所有博客名称。
  • 评论功能 —— 为一篇给定博客发表评论。
在投票应用中将有4个视图:

Question首页----显示最新发布的几个Question

Question"详细"页面-- 显示单个Questlion的具体内容

Question"结果"页面---显示Question的投票结果

编辑第一个视图:

打开polls/views.py 文件(这就是视图中的执行代码):


写完执行代码后需要后期的包装配置,以便使其正常运转,在polls文件中新建一个urls.py文件:

应用中的urls.py仅是应用里面的,要想让外面的大框架知道,需要只会大框架,(让大框架中配置,以使其被广大人民知道.):在mysite文件中对urls.py进行配置:

由此,我们可以编辑更多的视图了:

编辑之后还要重新对应用中的urls.py进行配置:

不必对mysites/urls.py进行配置了,因为之前写第一个应用的时候已经对其进行配置了.


现在编写拥有实际功能的视图:

每个视图只负责处理两件事中的一件:返回一个包含所请求的页面内容HttpResponse对象,或者是一个抛出的Http404异常.

为了方便,我们使用之前的学过的数据库API,在polls/views.py更改:

最终显示为:

这里出现一个问题,页面的设计被硬编码到视图中,如果你想更改页面的外观,就得编码这段python代码,因此,我们用Django的模板系统,通过创建一个叫做templates的目录.django将在这里查找模板.

首先,在polls文件中创建templates的目录.Django将在这里查找模板(注意和在mysites中创建的templates文件不同)

项目中的templates设置描述了Django将如何加载并渲染模板.默认的设置文件settings.py配置一个DajngoTemplates后端,其中将APP_DIRS选项设置为True.按照惯例,DjangoTemplates在INSTALLED_APPS所包含的每个应用的目录下查找名为"templates"子目录.这就是我们为什么没有像之前所做的那样修改DIRS,Djagno也能找到模板的原因.

在创建的templates文件中建立polls文件,在创建的polls文件中建立index.html文件.(polls/templates/polls/index.html):

我们更新polls/views.py中的index视图来使用模板:polls/views.py:

浏览器界面为:

这里讲一下快捷方式render():

常见的一个习惯是载入一个模板\填充一个Context然后返回一个含有模板渲染结果的HttpResponse对象.Django为此提供一个快捷方式.下面是一个重写后的index()视图:

一旦我们应用了快捷函数,就不需要再导入loader RequestContext和Httpresponse.render()函数将请求对象设置为第一个参数,模板的名字作为它的第二个参数,一个字典作为它可选的第三个参数.它返回一个HttpResponse对象,含有用给定的Context渲染后的模板.


引发一个404错误:

处理Question详细页面的视图--显示Question内容界面:

显示为:

学习快捷方式:get_object_or_404()

一种常见的习惯是使用get()并在对象不存在时引发404,Django为此提供了一个快捷方式.:

get_object_or_404()函数将一个Django模型作为它的第一个参数,任意数量的关键字参数作为它的第二个参数,它将这些关键字参数传递给模型管理器中的get()函数,如果对象不存在,他就引发http404异常.

使用模板系统:

将polls/detail.html改为:

显示为:

移除模板中的硬编码的URLs:

在polls/index.html中的硬编码指向性链接为:

转换为:

它的工作原理是在polls.urls模块里查找指定的URL的定义.你知道名为"detail"URL的准确定义在:

如果想更改URL名字 则在这里面添加就行了.


带有名空间的URL名字:

如果由多个应用是,Django如何区别URL名字?答案是在主URLconf中添加命名空间.在mysite/urls.py文件中,添加命名空间就行:

这时将polls/index.html中的:

改为:



1 0