• 作为Web框架,Django提供了模板,用于编写html代码,还可以嵌入模板代码更快更方便的完成页面开发,再通过在视图中渲染模板,将生成最终的html字符串返回给客户端浏览器
  • 模板致力于表达外观,而不是程序逻辑
  • 模板的设计实现了业务逻辑view与显示内容template的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用
  • 模板包含两部分:
    静态部分,包含html、css、js
    动态部分,就是模板语言
  • Django处理模板分为两个阶段:
    加载:根据给定的路径找到模板文件,编译后放在内存中。
    渲染:使用上下文数据对模板插值并返回生成的字符串。
  • 为减少重复编写加载、渲染的代码,Django提供了简写函数render(),用于调用模板。

Django模板语言(DTL)

  • 定义在django.template包中
  • 模板语言包括4种类型,分别是:模板变量、模板标签、模板过滤器、模板注释
    模板变量
    模板变量的用来显示从服务端传递过来的数据
  • 语法格式:

HTML页面:{{ 变量名 }}
视图处理函数:return render(request, ‘HTML页面’, 字典数据)

  • 变量名,使用字典数据中的键作为变量名
  • 获取不同类型的数据

数字类型:{{ 变量名 }}
字符串类型:{{ 变量名 }}
列表类型:{{ 变量名.下标 }}
字典类型:{{ 变量名.键 }}
对象类型:{{ 变量名.属性 }}

  • 如果变量不存在时,显为空字符串
  • 在模板中可以调用方法,但不能传递参数

实例演练: 将字典值传递给页面

  • 修改urls.py文件:url(r’^temp_var/$’, views.temp_var),
  • 修改views.py文件:
def temp_var(request):dict = {'title': '字典键值'}book = BookInfo()book.btitle = '对象属性'context = {'dict': dict, 'book': book}return render(request, 'app/temp_var.html', context)
  • 在templates/app目录中添加页面文件temp_var.html
<body>
模板变量:<br/>
{{ dict.title }}<br/>
{{ book.btitle }}<br/>
</body>
  • 在浏览器中查看结果

模板标签

语法格式:{% 代码段 %}

  • for标签语法格式:
{% for item in 列表 %}循环逻辑{{ forloop.counter }}表示当前是第几次循环,从1开始
{% empty %}列表为空或不存在时执行此逻辑
{% endfor %}
  • if标签语法格式:
{% if 条件1 %}逻辑1
{% elif 条件2 %}逻辑2
{% else %}逻辑3
{% endif %}
  • 比较运算符:==、!=、<、>、<=、>=
    注意: 运算符左右两侧不能紧挨变量或常量,必须有空格。
  • 逻辑运算符:and、or、not

实例演练: 在页面上显示图书列表

  • 修改urls.py文件:url(r’^temp_book/$’, views.temp_book),

  • 修改views.py文件:

def temp_book(request):context = {'list': BookInfo.objects.all()}return render(request, 'app/temp_book.html', context)
  • 在templates/app目录中添加页面文件temp_book.html
<body>
图书列表如下:
<ul>{% for book in list %}{% if book.id <= 2 %}<li style="color: red;">{{ book.btitle }}</li>{% elif book.id <= 3 %}<li style="color: blue;">{{ book.btitle }}</li>{% else %}<li style="color: green;">{{ book.btitle }}</li>{% endif %}{% empty %}<li>对不起,没有图书</li>{% endfor %}
</ul>
</body>
  • 在浏览器中查看结果

    模板过滤器
    使用过滤器对变量进行计算、格式转换等操作
  • 语法格式:变量|过滤器:参数
  • 常用过滤器:
    length,返回字符串包含字符的个数,或列表、元组、字典的元素个数。
    default,如果变量不存在时则返回默认值。
    date,用于对日期类型的值进行字符串格式化,常用的格式化字符如下:
    Y表示年,格式为4位,y表示两位的年。
    m表示月,格式为01,02,12等。
    d表示日, 格式为01,02等。
    j表示日,格式为1,2等。
    H表示时,24进制,h表示12进制的时。
    i表示分,为0-59。
    s表示秒,为0-59。

实例演练: 对书名大于4个字符的图书,格式化其出版时间

  • 修改urls.py文件:url(r’^temp_filter/$’, views.temp_filter),

  • 修改views.py文件:

def temp_filter(request):context = {'list': BookInfo.objects.all()}return render(request, 'app/temp_filter.html', context)
  • 在templates/app目录中添加页面文件temp_filter.html
<body>
图书列表如下:
<ul>{% for book in list %}{% if book.btitle|length > 4 %}<li style="color: red;">{{ book.btitle }}---默认时间格式为:{{ book.bpub_date }}</li>{% else %}<li style="color: green;">{{ book.btitle }}---格式化时间为:{{ book.bpub_date|date:"Y-m-j" }}</li>{% endif %}{% endfor %}
</ul>
</body>
  • 在浏览器中查看结果

模板注释

  • 在模板中使用如下模板注释,这段代码不会被编译,不会输出到客户端
  • html注释只能注释html内容,不能注释模板语言。
  • 单行注释语法格式:
    {#…#},注释可以包含任何模版代码,有效的或者无效的都可以。
  • 多行注释使用comment标签,语法格式:
    {%comment%}

    {%endcomment%}

Django框架学习 —9模板详解 -- DTL相关推荐

  1. Spring框架学习教程,详解Spring注入bean的几种方式

    首先,要学习Spring中的Bean的注入方式,就要先了解什么是依赖注入. 依赖注入是指:让调用类对某一接口的实现类的实现类的依赖关系由第三方注入,以此来消除调用类对某一接口实现类的依赖. Sprin ...

  2. django框架中的QuerySet详解及相关操作

    QuerySet概念 从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet. <QuerySet [<Goods: Goods object (8)>, <G ...

  3. Django框架学习(一)Django框架安装和项目创建详解

    Django框架学习(一)Django框架安装和项目创建详解 文章目录 Django框架学习(一)Django框架安装和项目创建详解 一.简介 1.1介绍 1.2 URL 1.3.框架原理 二.安装 ...

  4. django多个html模板,django二、模板详解(templates)——页面视图

    django模板(templates) 在Django框架中,模板是可以帮助开发者快速生成呈现给用户页面的工具 模板的设计方式实现了我们MTV中V和T的解耦,VT有着N:M的关系,一个V可以调用任意T ...

  5. Android Binder框架实现之Parcel详解之基本数据的读写

       Android Binder框架实现之Parcel详解之基本数据的读写 Android Binder框架实现目录: Android Binder框架实现之Binder的设计思想 Android ...

  6. 26.C++- 泛型编程之类模板(详解)

    在上章25.C++- 泛型编程之函数模板(详解) 学习了后,本章继续来学习类模板   类模板介绍 和函数模板一样,将泛型思想应用于类. 编译器对类模板处理方式和函数模板相同,都是进行2次编译 类模板通 ...

  7. halcon例程讲解_跟我学机器视觉-HALCON学习例程中文详解-开关引脚测量

    跟我学机器视觉-HALCON学习例程中文详解-开关引脚测量 This example program demonstrates the basic usage of a measure object. ...

  8. 深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) By 李泽南2017年6月26日 15:57 本周一(6 月 19 日)机器之心发表文章《我的深度学习开发环境详解:Te

    深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) 机器之心 2017-06-25 12:27 阅读:108 摘要:参与:李泽南.李亚洲本周一(6月19日)机器之心发表文章<我的深 ...

  9. IOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem

    转:http://blog.csdn.net/totogo2010/article/details/7681879 1.UINavigationController导航控制器如何使用 UINaviga ...

最新文章

  1. 详解PyTorch中的ModuleList和Sequential
  2. Unity手游:自动寻路Navmesh 跳跃 攀爬 斜坡
  3. apm最高的记录_2020年秋季APM专业课推荐
  4. 一个简单的synchronized多线程问题、梳理与思考
  5. 小明分享|基于VSCode Espress IDF软件环境搭建
  6. java httpclient4_httpclient4使用说明
  7. Windows 7 常用快捷键 命令
  8. java 每隔一小时运行_每隔一小时执行一次 Full GC 分析排查
  9. PHP可以读取什么配置文件,PHP读取配置文件类实例
  10. JAVA调试出现不断在ClassLoader类中执行时的问题?
  11. iOS可视化动态绘制连通图(Swift版)
  12. CROC 2016 - Elimination Round Mischievous Mess Makers
  13. nginx+lua搭建文件上传下载服务
  14. QQ邮箱文件中转站低调升级:取消续期功能
  15. 目标客户画像_4 种类型 + 10 大步骤,详解用户画像
  16. android 日期转星座,日期匹配星座,月日匹配星座,android 星座
  17. 大表哥有个项目,100W预算,让我顺手做了算了......
  18. 如何解决谷歌浏览器网页不能复制与右键点击问题
  19. 服务器虚拟化用什么显卡,显卡虚拟化使用及配置技术
  20. 阻止事件冒泡,阻止默认事件,event.stopPropagation()和event.preventDefault(),return false的区别

热门文章

  1. python如何获取字符串最后一个字符?
  2. 控件注册监听器编写响应的三种方式
  3. 打通血管血栓绝密配方!
  4. 异或运算规则及其应用
  5. linux下x86和arm架构区别
  6. android运行python脚本,在android应用程序中运行python脚本
  7. Python机器学习(四):logistic回归
  8. 【大白话学习】UniApp 微信小程序与APP应用 开发零基础入门教程(七)---登陆注销功能与微信小程序测试号的申请
  9. R语言|for循环————R语言入门到入土系列(八)
  10. 2020B证(安全员)实操考试视频及B证(安全员)考试试题