一、概述

用户请求到视图流程:

  • 当有人访问我们django项目的时候 例如127.0.0.1:8000/polls/23,django首先到加载mysite.urls模块

  • 在mysite.urls中发现有urlpatterns变量,于是在其内按顺序进行匹配。当它匹配上了polls,就到匹配到的polls.urls中进行下一步处理

  • 在polls.url中又匹配到了/,最终结果就是调用该模式对应的detail视图。

mysite/urls.py文件

polls/urls.py文件

polls/views.py文件

二、模板的命名空间

1、首先,在polls目录下创建一个新的templates目录,Django会在它里面查找模板文件。

项目settings.py文件中的 TEMPLATES配置项描述了 Django 如何载入和渲染模板。默认的设置文件设置了 DjangoTemplates 后端作为模板引擎,并将 APP_DIRS设置成了 True。这一选项将会让 DjangoTemplates 在每个 INSTALLED_APPS 文件夹中寻找 "templates" 子目录。

2、在templates中创建index文件

3、修改视图文件polls/views.py,让新的index.html文件生效并且如果请求的问卷ID不存在,那么会弹出一个Http404错误。

以上代码使用快捷方式:get_object_or_404()

就像render函数一样,get_object_or_404()方法

三、url Names命名空间

当你有多个app的时候Django通过URL name来区分某个APP,在polls/urls.py文件的开头部分,添加一个app_name的变量来指定该应用的命名空间:

四、form表单

1、修改polls/detail.html文件,代码如下:

简要说明:

  • 上面的模板显示一系列单选按钮,按钮的值是选项的ID,按钮的名字是字符串"choice"。这意味着,当你选择了其中某个按钮,并提交表单,一个包含数据choice=#的POST请求将被发送到指定的url,#是被选择的选项的ID。这就是HTML表单的基本概念。

  • form标签的action属性和method属性,action表示你要发送的目的url,method表示提交数据的方式,一般分post和get。

  • forloop.counter是Django模板系统专门提供的一个变量,用来表示你当前循环的次数,一般用来给循环项目添加有序数标。

  • 由于我们发送了一个POST请求,就必须考虑一个跨站请求伪造的安全问题,简称CSRF。Django为你提供了一个简单的方法来避免这个困扰,那就是在form表单内添加一条{% csrf_token %}标签,标签名不可更改,固定格式,位置任意,只要是在form表单内。这个方法对form表单的提交方式方便好使。

2、修改polls/views.py文件中的vote函数

简要说明:

  • request.POST是一个类似字典的对象,允许你通过键名访问提交的数据。本例中,request.POST[’choice’]返回被选择选项的ID,并且值的类型永远是string字符串,哪怕它看起来像数字!同样的,你也可以用类似的手段获取GET请求发送过来的数据,一个道理。

  • request.POST[’choice’]有可能触发一个KeyError异常,如果你的POST数据里没有提供choice键值,在这种情况下,上面的代码会返回表单页面并给出错误提示。

  • 在选择计数器加一后,返回的是一个HttpResponseRedirect而不是先前我们常用的HttpResponseHttpResponseRedirect需要一个参数:重定向的URL。这里有一个建议,当你成功处理POST数据后,应当保持一个良好的习惯,始终返回一个HttpResponseRedirect。这不仅仅是对Django而言,它是一个良好的WEB开发习惯。

  • 我们在上面HttpResponseRedirect的构造器中使用了一个reverse()函数。它能帮助我们避免在视图函数中硬编码URL。它首先需要一个我们在URLconf中指定的name,然后是传递的数据。例如'/polls/3/results/',其中的3是某个question.id的值。重定向后将进入polls:results对应的视图,并将question.id传递给它。白话来讲,就是把活扔给另外一个路由对应的视图去干。

当有人对某个问题投票后,vote()视图重定向到了问卷的结果显示页面。下面我们来写这个处理结果页面的视图函数detail函数(polls/views.py):

还需要写个模板polls/templates/polls/results.html。(路由、视图、模板、模型!都是这个套路....)

五、使用通用视图,减少代码量

将原来的代码改为通用视图的方法:

  • 修改URLconf设置

  • 删除一些旧的无用的视图

  • 采用基于类视图的新视图

1、修改URLconf

2、修改视图

在这里,我们使用了两种通用视图ListViewDetailView(它们是作为父类被继承的)。这两者分别代表“显示一个对象的列表”和“显示特定类型对象的详细页面”的抽象概念。

  • 每一种通用视图都需要知道它要作用在哪个模型上,这通过model属性提供。

  • DetailView需要从url捕获到的称为"pk"的主键值,因此我们在url文件中将2和3条目的修改成了。

默认情况下,DetailView通用视图使用一个称作/_detail.html的模板。在本例中,实际使用的是polls/detail.htmltemplate_name属性就是用来指定这个模板名的,用于代替自动生成的默认模板名。(一定要仔细观察上面的代码,对号入座,注意细节。)同样的,在results列表视图中,指定template_name'polls/results.html',这样就确保了虽然resulst视图和detail视图同样继承了DetailView类,使用了同样的model:Qeustion,但它们依然会显示不同的页面。(模板不同嘛!so easy!)

类似的,ListView通用视图使用一个默认模板称为/_list.html。我们也使用template_name这个变量来告诉ListView使用我们已经存在的 "polls/index.html"模板,而不是使用它自己默认的那个。

在教程的前面部分,我们给模板提供了一个包含questionlatest_question_list的上下文变量。而对于DetailView,question变量会被自动提供,因为我们使用了Django的模型(Question),Django会智能的选择合适的上下文变量。然而,对于ListView,自动生成的上下文变量是question_list。为了覆盖它,我们提供了context_object_name属性,指定说我们希望使用latest_question_list而不是question_list

修改了模板文件tpl如何立即生效_Views视图与模板相关推荐

  1. 修改了模板文件tpl如何立即生效_Python3操作Office之Word模板技术

    在平时工作当中,经常会遇到大部分文字固定不变,小部分内容修改的相关文档.如放假通知.工作日志.工作周报.合同等. 以往都要打开,修改,保存,犹如机械一般的操作,如内容少还可勉强接受,倘若内容多时,反复 ...

  2. akcms在模板文件中书写{php},AKCMS支持灵活的模板插件

    _2mEvMS"> AKCMS从2.6版本起支持自定义的模板插件. AKCMS模板插件安装说明 1 从akcms官网下载模板插件包,正常的话解压缩后只有一个扩展名是.template. ...

  3. php tpl模板文件,php自己创建TPL模板引擎之初学习

    一,创建初始化模板所需的文件和文件夹. 1,index.php主文件,用于编写业务逻辑. 2,template.inc.php模板初始化文件,用于初始化模板信息. 3,templates目录存放所有的 ...

  4. 自建html网页,幽灵自建的html5 的模板文件!

    *{ font-family:Source Code Pro,Microsoft YaHei; padding:0; margin:0; } .main{ width: 80%; height: 45 ...

  5. 【Flask】官方教程(Tutorial)-part2:蓝图-视图、模板、静态文件

    前序文章: 官方教程(Tutorial)-part1:项目布局.应用程序设置.定义和访问数据库 蓝图-视图 视图函数是您为响应应用程序请求而编写的代码.Flask 使用模式将传入的请求 URL 与应该 ...

  6. discuz模板文件列表

    template/default/common模板公共文件夹,全局相关     |--block_forumtree.htm 树形论坛版块分支js文件     |--block_thread.htm特 ...

  7. git如何配置模板文件

    git如何创建模板文件 创建xxx_template文件,其内容为团队制定的Git提交注释规范,如: Desgraption: Date: Author: 通过git config命令配置commit ...

  8. Django框架(8.Django中的模板文件的使用和模板变量的简单使用)

    为什么使用模板 通过视图可以给用户返回一些字符串等等, 那如何向请求者返回一个漂亮的页面呢? 肯定需要用到html.css,如果想要更炫的效果还要加入js,问题来了,这么一堆字段串全都写到视图中,作为 ...

  9. html 模板配置,模板文件配置

    模板文件一定要小写下划线,如 list_pubu.html 你可以给你每一个模板文件增加一个json配置文件,用于描述这个模板文件;配置文件和模板文件名是同名的,只是后缀为 json,如simpleb ...

最新文章

  1. 后台服务器经典面试题
  2. Maven快速创建SpringMVC web(1)
  3. 事务复制提示初始快照不可用_谈谈数据库的事务ACID
  4. Java HashMap的实现原理详解
  5. 在DrawingVisual上绘制圆形的进度条,类似于IOS系统风格。
  6. ABP入门系列(16)——通过webapi与系统进行交互
  7. 7003.node.js环境搭建及三方软件包
  8. Qt自定义委托在QTableView中绘制控件、图片、文字
  9. A Software Developer’s Reading Plan
  10. 得先好好研究一数据库
  11. 8.业务架构·应用架构·数据架构实战 --- 技术方案书
  12. 2018招行笔试分红包
  13. Mov文件格式对mdat和moov的分析
  14. 传感器和变送器的区别
  15. python jwt pyjwt 使用案例
  16. 北大考研复试上机——W's Cipher
  17. 深入BBN,如何解决长尾数据分布的同时兼顾表示学习
  18. IfcPlusPlus环境配置
  19. 项目实训工作记录(二)
  20. 前端小团队建设(实用前端开发规范,推荐收藏)

热门文章

  1. 深入理解Linux内存映射机制
  2. python支持多种编程范式吗_Python3学习之路~6.1 编程范式:面向过程 VS 面向对象...
  3. windows版本的redis
  4. AngularJS与Angular的区别
  5. php怎样数据缓存文件,php数据缓存到文件类设计
  6. 第一个错误的版本_寻找第一个错误的版本
  7. Java DataOutputStream writeInt()方法及示例
  8. c语言memcmp和java的_C语言memcmp()函数:比较m字节长的两个字符串s1和s2
  9. 获取天气html,使用htmlparser获取sohu的天气预报
  10. mcq 队列_MCQ | 软件程序分析工具和组件分类| 免费和开源软件