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

一、概述

584080849fb7814f2e76a407686f2847.png

用户请求到视图流程:

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

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

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

mysite/urls.py文件

4deb1e6cabdf799a28ac36b562aac38c.png

polls/urls.py文件

8b213bd79df8aefcdbe54edbb536ed09.png

polls/views.py文件

117ece4db9ef82875d239b6fee952421.png

二、模板的命名空间

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

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

2、在templates中创建index文件

fd4f11b9ad832e66655dcc6d45d3b0ec.png

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

bf8495cce5c55669ba76f39e4bcc7791.png

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

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

三、url Names命名空间

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

92b4c0cd30c3282b9bfc6d732f0549bd.png

四、form表单

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

c41ab1592b3625aec3df5821334d3b1d.png

简要说明:

  • 上面的模板显示一系列单选按钮,按钮的值是选项的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函数

b92e89d4ded3d79abdfe1f4f62d21bab.png

简要说明:

  • 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):

2f425454b40217e8993891e91e63743a.png

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

20394ebff58defabb9c1ea8c995e5bc5.png

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

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

  • 修改URLconf设置

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

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

1、修改URLconf

0302bde9fbffb521c05dc4e3c9e72e59.png

2、修改视图

1ba3c37cffc49b7f62eb9ec72adb5711.png

在这里,我们使用了两种通用视图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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/552429.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue本地没事放到服务器上无限循环,解决vue中的无限循环问题

项目中遇到了这样一个问题:每一种产品有对应的服务费,每一个商家有多种商品要单独计算每一家的服务费,最后汇总总的服务费用。我直接写了一个方法来计算出每个商家和总的服务费用并return出来。如果不看控制台的话运行是没问题的。但是控制台…

壁式框架内力计算_4种类型剪力墙的计算要点

剪力墙又称抗风墙、抗震墙或结构墙。房屋或构筑物中主要承受风荷载或地震作用引起的水平荷载和竖向荷载(重力)的墙体,防止结构剪切(受剪)破坏。又称抗震墙,一般用钢筋混凝土做成。它分平面剪力墙和筒体剪力墙。平面剪力墙用于钢筋混凝土框架结构、升板结…

片源系统服务器,OUO NAS10主控界面评测

OUO NAS10主控界面评测■OUO NAS10主控界面评测OUO NAS10采用了高集成度的芯片,功耗比较低,整机满载情况下也不会超过9W。不过他的主控界面看起来还是比较简单易懂的,由于本身自带了linux的操作系统,还是比较容易上手的。附送光盘…

解锁设备_无师自通解锁新设备抗击疫情

随着春节假期接近尾声,一线企业复工复产,春运迎来全面返程客流高峰,为应对返程客流,做好疫情防控工作,哈车管内各站全面组织积极应对,做好进出站旅客测温,加强对进出站旅客体温筛查,…

主从式网络的优点_贸泽电子原创开发板大赛【创意奖作品】物联网开发板做成主从机形式,是创意还是多此一举?...

没有创意,竞赛还有什么意义?作为汇集了国内工程师中的一批顶尖高手的设计大赛,本届贸泽电子原创开发板大赛自然少不了“最佳创意奖”,今天,就让我们来看看工程师大开脑洞的获奖作品有何稀奇?奖创意奖《基于…

docker mysql配置 丢失_Ubuntu16.04服务器环境配置 – Docker、MySQL、Redis

Ubuntu16.04 服务器环境配置 – Docker、MySQL、Redis安装Docker1. 卸载旧版本sudo apt-get remove docker docker-engine docker.io2. 安装 https 相关的软件包sudo apt-get update # 先更新一下软件源库信息sudo apt-get install apt-transport-https ca-certificates cur…

mysql主从配置_MySQL主从配置详解

主服务器数据库的每次操作都会记录在其二进制文件mysql-bin.xxx(该文件可以在mysql目录下的data目录中看到)中,从服务器的I/O线程使用专用账号登录到主服务器中读取该二进制文件,并将文件内容写入到自己本地的中继日志relay-log文件中,然后从…

mysql 复制方式_MySQL复制方法

MySQL的二进制日志,MySQL复制原理,MySQL主从模式搭建,MySQL双主模式搭建,MySQL级联模式搭建,MySQL半同步模式复制一、二进制日志1、概念MySQL的二进制日志(binary log)是一个二进制文件,主要用于记录修改数…

mysql内部时区_一文解决MySQL时区相关问题

前言:在使用MySQL的过程中,你可能会遇到时区相关问题,比如说时间显示错误、时区不是东八区、程序取得的时间和数据库存储的时间不一致等等问题。其实,这些问题都与数据库时区设置有关,本篇文章将从数据库参数入手&…

制作 mysql的rpm文件_自制mysql.rpm安装包

RPM安装比源码更快更方便,更利于统一版本,省去了繁琐的编译过程,下面以制作mysql的rpm安装包为例。编译环境1、 安装rpm-build;检查是否配置rpm环境1 # sudo yum list | greprpm2 This system is not registered with RHN.3 RHN s…

mysql multi主从复制_mysqld_multi方式配置Mysql数据库主从复制

mysqld_multi设计用于管理在同一台机器上运行的多个mysqld进程,这些进程使用不同的socket文件并监听在不同的端口上。mysqld_multi可以批量启动、关闭、或者报告这些mysqld进程的状态。在这里我们通过这种方式来在同一个机器上启动多个数据库实例,并配置…

mysql中if在oracle怎么用_mysql和oracle的mybatis操作

1.Oracle、MySQL插入时返回下一个主键的操作Xml代码 Oracle:SELECT SEQ_ROLE.NEXTVAL AS ID FROM DUALinsert into ROLE(ID, NAME, CREATE, MODIFY) values (#{id}, #{name}, sysdate, sysdate)注意:这边的keyProperty"id"中"id"指的…

mysql数据库的三级模式_2016年计算机三级MySQL数据库试题

2016年计算机三级MySQL数据库试题一、选择题1.E-R图提供了表示信息世界中实体、属性和________的方法。A.数据B.联系C.表D.模式2.数据库系统的核心是________。A.数据模型B.数据库管理系统C.数据库D.数据库管理员3.E-R图是数据库设计的工具之一,它一般适用于建立数据…

mysql没加引号导致全表扫描_mysql隐蔽的索引规则导致数据全表扫描

索引是为了加速数据的检索,但是不合理的表结构或适应不当则会起到反作用。我们在项目中就遇到过类似的问题,两个十万级别的数据表,在做连接查询的时候,查询时间达到了7000多秒还没有查出结果。首先说明,关联的字段都已…

mysql 多个密码登录_mysql 多实例登录密码测试

最近在做mysql 多实例的时候,采用不同的方式登录mysql数据库,发现mysql -uroot -p -h 127.0.0.1 -P3308 ,登录时居然不要密码就可以登录,吓得我一身汗,经过检查终于找到原因记录下来,给小白们参考。[rootmy…

redhat5.4 安装mysql_Linux redhat 5.4上安装MYDNS

Linux redhat 5.4上安装MYDNS一、1,MYDNS 的简介:MyDNS是一个UNIX平台下的免费DNS服务器端软件。它被设计成直接从数据库中读取DNS记录软件,并且修改记录后也可时时生效。在MyDNS上,你可随心所欲地增加你自己的次级域名的同时建站…

java的反射机制是什么_JAVA反射机制

一、什么是反射机制 简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。二、哪里用到反射机制 有些时候,我们用过一些知识&#xf…

java unsafe park_Java魔法类——Unsafe应用解析

前言Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使Java…

计算机视觉基础(12)——图像恢复

前言 我们将学习图像恢复相关知识。主要有图像恢复的定义、评价标准和实现图像恢复的方法。图像恢复任务包括图像去噪、去模糊、图像超分辨率、图像修复等;评价标准有峰值信噪比和结构相似性;图像超分辨的方法有传统方法和基于深度学习的方法&#xff1a…

百度编辑器图片上传 java_百度编辑器粘贴图片自动上传到服务器(Java版)

ChromeIE默认支持粘贴剪切板中的图片,但是我要发布的文章存在word里面,图片多达数十张,我总不能一张一张复制吧?Chrome高版本提供了可以将单张图片转换在BASE64字符串的功能。但是无法处理多张图片。而且转换成BASE64后是作为内容…