在前面的介绍中我们都是用简单的 django.http.HttpResponse来把内容显示到网页上,本节将讲解如何使用渲染模板的方法来显示内容,即调用精美的HTML页面。模板的创建既可以在项目下创建一个templates目录来存放模板,也可以在app应用中新建一个templates文件夹来存放各个模板。

模板配置

要注意的是不管是以哪种方式创建,都要记得在settings中进行配置,不然在调用视图函数时是找不到你指定的是哪个模板。如果是在项目下创建的模板目录,则在settings中的TEMPLATES中的DIRS进行配置,输入创建模板的路径。如果是在app应用中创建的模板,把 app名 加入到 settings.INSTALLED_APPS中。

项目下的templates配置

app下的templates的配置

模板渲染

模板渲染利用的是django.shortcuts.render方法,放在视图函数的return语句中。render方法的第一个参数是request关键字,第二个参数是模板的路径,第三个可选参数是context,以字典的格式作为参数传递给模板,模板可以通过模板变量来接收,模板变量在下面会介绍。

注意:我们一般将模板放在app下的templates中,Django会自动去这个文件夹中找。但 假如我们每个app的templates中都有一个 index.html,当我们在views.py中使用的时候,直接写一个 render(request, 'index.html'),Django 能不能找到当前 app 的 templates 文件夹中的 index.html 文件夹呢?(答案是不一定能,有可能找错)下面介绍下模板的查找机制是怎样的。

Django 模板查找机制: Django 查找模板的过程是在每个 app 的 templates 文件夹中找(而不只是当前 app 中的代码只在当前的 app 的 templates 文件夹中找)。各个 app 的 templates 形成一个文件夹列表,Django 遍历这个列表,一个个文件夹进行查找,当在某一个文件夹找到的时候就停止,所有的都遍历完了还找不到指定的模板的时候就是 Template Not Found (过程类似于Python找包)。这样设计有利当然也有弊,有利是的地方是一个app可以用另一个app的模板文件,弊是有可能会找错了。所以我们使用的时候在 templates 中建立一个 app 同名的文件夹,这样就好了。即在每个app中的 templates 文件夹中再建一个 app 的名称,仅和该app相关的模板放app/templates/app/ 目录下面。

下面在music这个app中实现模板的渲染,首先在music下创建一个目录templates及其子目录music来存放一个模板index.html,再在settings文件中进行配置,再在视图文件中写一个视图函数利用render方法来调用这个模板。

模板变量

模板变量用来接收视图函数传来的值,传来的是一个字典格式。字典中的key在模板中充当变量名,value可以是字典、模型、函数、列表、类方法等。在模板中,变量加点有着特殊的含义,其表示查找。故若传来value是一个字典或列表,可以通过变量.key或变量.下标来取特定的值。

模板变量的语法规则: {{ 变量名 }} 。

下面举一个小例子,传递一个列表和一个字典,然后再模板中分别取一个展示。

模板过滤器

作用: 对变量进行过滤。在真正渲染出来之前,过滤器会根据功能处理好变量,然后得出结果后再替换掉原来的变量展示出来。

语法规则:{{ 变量名|过滤器:参数 }} ,变量名与过滤器通过管道符|分隔开,过滤器的参数与过滤器通过冒号分隔。

下图是一些常用过滤器的总结。

注意:default无论是真的None还是空字符,都会返回一个False,而default_if_none在变量真的为None时才会返回False,然后使用提供的默认值。

date和time的格式化字符如下图所示:

下面的小例子是时间的过滤

floatformat过滤器用于过滤浮点型数据,默认保留一位小数,也可以指定保留小数的个数。

safe过滤器用于关闭变量的自动转义,变量的自动转义就是将<、>、&、空格等转为前端的特殊字符。

Django2.0——模板渲染(一)的更多相关文章

  1. django2.0模板相关设置

    看到了django的模板有include标签 include 标签 {% include %} 标签允许在模板中包含其它的模板的内容. 下面这个例子都包含了 nav.html 模板: {% inclu ...

  2. 《玩转Django2.0》读书笔记-编写URL规则

    <玩转Django2.0>读书笔记-编写URL规则 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. URL(Uniform Resource Locator,统一资源定位 ...

  3. 《玩转Django2.0》读书笔记-Django建站基础

    <玩转Django2.0>读书笔记-Django建站基础 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.网站的定义及组成 网站(Website)是指在因特网上根据一 ...

  4. Django2.0路由层-URLconf

    目录 DJango2.0路由层-URLconf 概述 urlpatterns 实例 path转换器 自定义path转换器 使用正则表达式 命名组(有名分组) URLconf匹配请求URL中的哪些部分 ...

  5. Django2.0使用

    创建项目: 通过命令行的方式:首先要进入到安装了django的虚拟环境中.然后执行命令: django-admin startproject [项目的名称] 这样就可以在当前目录下创建一个项目了. 通 ...

  6. python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器

    python3.5 manage.py runserver python Django教程 之模板渲染.循环.条件判断.常用的标签.过滤器 一.Django模板渲染模板 1. 创建一个 zqxt_tm ...

  7. 出位的template.js 基于jquery的模板渲染插件

    找了好几款基于jquery的模板渲染插件,无一感觉很难用(教程较少.绑定不统一),也可能我智商问题,比如jquery template.js .jtemplate.js. 然后在github上找到这一 ...

  8. thinkphp3.2.3模板渲染支持三元表达式

    thinkphp3.2.3模板渲染支持三元表达式 {$status?'正常':'错误'} {$info['status']?$info['msg']:$info['error']} 注意:三元运算符中 ...

  9. Django模板渲染

    一 . 语法 # 关于模板渲染只需要记住两种语法就可以: 1.{{ }} # 里面写变量 2.{% %} # 里面写与逻辑相关的,比如for循环 二 . 变量名 在django的模板语言中按照语法: ...

随机推荐

  1. POJ - 3264 Balanced Lineup(线段树或RMQ)

    题意:求区间最大值-最小值. 分析: 1.线段树 #include<cstdio> #include<cstring> #include<cstdlib> #inc ...

  2. 三十二、SAP中定义选择屏幕

    一.SAP中PARAMETERS表示选择屏幕,使用方法如下 二.运行代码 三.PA_CAR为我们选择的0017 四.点击执行之后,由于我们未在代码中触发相关的过滤功能,显示的表格为全部表格,效果如下

  3. hashCode equals hashSet

    基于hash的map也是这种机制. HashSet import java.util.HashSet; import java.util.Set; import java.util.TreeSet; ...

  4. ROS2学习日志:TurtleSim测试日志(基于ROS2 Eloquent Elusor)

    TurtleSim测试日志(基于ROS2 Eloquent Elusor) 1.ros2 run 1.1 ros2 run turtlesim turtlesim_node --ros-args -- ...

  5. JavaScript的运算符、条件判断、循环、类型转换(9.25 第十一天)

    JS的运算符 加 + 减 - 乘 * 除 / 取余 % 自增 ++ 自减 -- 赋值运算符 a=3 a+=3  a=a=3 a-=3   a=a-3 a*=3  a=a*2 a/=3   a=a/3 ...

  6. JavaScript(第十一天 9.24)

    Html(决定页面显示的数据)+CSS(决定页面的布局)+JS(和用户或者服务器交互.决定页面的行为) JS前端的编程语言,脚本语言,简单易学,基础是HTML+CSS 编译工具使用:vscode  s ...

  7. pytorch文档学习笔记(2)

    三.CUDA semantics 二.Broadcasting semantics  广播机制 广播机制要第一项对齐,第一项对齐后(相等)才能广播,或者某个第一项为1. 但如果两个size个数相等,则 ...

  8. 用AD 输出BOM时提示failed to open excel template

    解决办法: 去掉这个√!

  9. 现在购买5G“商用手机”值不值呢?是花冤枉钱还是提前享受?

    刚刚发布的"安卓最强机皇"华为Mate 20系列依然没有支持5G,只是在收割最后的4G红利.相比之下,即将发布的小米MIX 3,看起来亮点还是颇多的.除了滑盖摄像头.屏占比更高的全 ...

  10. PHP中Cookie与Session的异同以及使用

    Cookie与Session的异同: 一.cookie机制 Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器.IETF RFC 2965 HTTP State Mana ...