模板介绍

  • 作为Web框架,Django提供了模板,可以很便利的动态生成HTML
  • 模版系统致力于表达外观,而不是程序逻辑
  • 模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用
  • 模板包含
    • HTML的静态部分
    • 动态插入内容部分
  • Django模板语言,简写DTL,定义在django.template包中
  • 由startproject命令生成的settings.py定义关于模板的值:
    • DIRS定义了一个目录列表,模板引擎按列表顺序搜索这些目录以查找模板源文件
    • APP_DIRS告诉模板引擎是否应该在每个已安装的应用中查找模板
  • 常用方式:在项目的根目录下创建templates目录,设置DIRS值
DIRS=[os.path.join(BASE_DIR,"templates")]

模板处理

  • Django处理模板分为两个阶段
  • Step1 加载:根据给定的标识找到模板然后预处理,通常会将它编译好放在内存中
loader.get_template(template_name),返回一个Template对象
  • Step2 渲染:使用Context数据对模板插值并返回生成的字符串
Template对象的render(RequestContext)方法,使用context渲染模板
  • 加载渲染完整代码:
from django.template import loader, RequestContext
from django.http import HttpResponsedef index(request):tem = loader.get_template('temtest/index.html')context = RequestContext(request, {})return HttpResponse(tem.render(context))

快捷函数

  • 为了减少加载模板、渲染模板的重复代码,django提供了快捷函数
  • render_to_string("")
  • render(request,'模板',context)
from django.shortcuts import renderdef index(request):return render(request, 'temtest/index.html')

定义模板

  • 模板语言包括

    • 变量
    • 标签 { % 代码块 % }
    • 过滤器
    • 注释{# 代码或html #}

变量

  • 语法:
{{ variable }}
  • 当模版引擎遇到一个变量,将计算这个变量,然后将结果输出
  • 变量名必须由字母、数字、下划线(不能以下划线开头)和点组成
  • 当模版引擎遇到点("."),会按照下列顺序查询:
    1. 字典查询,例如:foo["bar"]
    2. 属性或方法查询,例如:foo.bar
    3. 数字索引查询,例如:foo[bar]
  • 如果变量不存在, 模版系统将插入'' (空字符串)
  • 在模板中调用方法时不能传递参数

在模板中调用对象的方法

  • 在models.py中定义类HeroInfo
from django.db import modelsclass HeroInfo(models.Model):...def showName(self):return self.hname
  • 在views.py中传递HeroInfo对象
from django.shortcuts import render
from models import *def index(request):hero = HeroInfo(hname='abc')context = {'hero': hero}return render(request, 'temtest/detail.html', context)
  • 在模板detail.html中调用
{{hero.showName}}

标签

  • 语法:{ % tag % }
  • 作用
    • 在输出中创建文本
    • 控制循环或逻辑
    • 加载外部信息到模板中供以后的变量使用
  • for标签
{ %for ... in ...%}
循环逻辑
{{forloop.counter}}表示当前是第几次循环
{ %empty%}
给出的列表为或列表不存在时,执行此处
{ %endfor%}
  • if标签
{ %if ...%}
逻辑1
{ %elif ...%}
逻辑2
{ %else%}
逻辑3
{ %endif%}
  • comment标签
{ % comment % }
多行注释
{ % endcomment % }
  • include:加载模板并以标签内的参数渲染
{ %include "foo/bar.html" % }
  • url:反向解析
{ % url 'name' p1 p2 %}
  • csrf_token:这个标签用于跨站请求伪造保护
{ % csrf_token %}
  • 布尔标签:and、or,and比or的优先级高
  • block、extends:详见“模板继承”
  • autoescape:详见“HTML转义”

过滤器

  • 语法:{ { 变量|过滤器 }},例如{ { name|lower }},表示将变量name的值变为小写输出
  • 使用管道符号 (|)来应用过滤器
  • 通过使用过滤器来改变变量的计算结果
  • 可以在if标签中使用过滤器结合运算符
if list1|length > 1
  • 过滤器能够被“串联”,构成过滤器链
name|lower|upper
  • 过滤器可以传递参数,参数使用引号包起来
list|join:", "
  • default:如果一个变量没有被提供,或者值为false或空,则使用默认值,否则使用变量的值
value|default:"什么也没有"
  • date:根据给定格式对一个date变量格式化
value|date:'Y-m-d'
  • escape:详见“HTML转义”
  • 点击查看详细的过滤器

注释

  • 单行注释
{#...#}
  • 注释可以包含任何模版代码,有效的或者无效的都可以
{# { % if foo % }bar{ % else % } #}
  • 使用comment标签注释模版中的多行内容

示例

  • 查询所有英雄信息显示出来,要求奇数行显示为红色,偶数行显示为蓝色

Django 模板4.1相关推荐

  1. Django模板过滤器详解

    Django 模板过滤器也是我们在以后基于 Django 网站开发过程中会经常遇到的,如显示格式的转换.判断处理等.以下是 Django 过滤器列表,希望对为大家的开发带来一些方便. 一.形式:小写 ...

  2. django模板的导入

    模板导入 前提:多个页面有一个相同的页面版块(多个有样式标签的集合体) 如何运用:可以将多个样式标签的集合进行封装对外提供版块的名字(接口),在有该版块的页面中直接导入即可 语法:{% include ...

  3. Django模板、配置文件、静态文件及案例实现(创建模板、设置模板查找路径、模板接收视图传入的数据、模板处理数据、BASE_DIR、DEBUG、本地语言与时区、App应用配置)

    1.Django模板 网站如何向客户端返回一个漂亮的页面呢? 漂亮的页面需要html.css.js. 可以把这一堆字段串全都写到视图中, 作为HttpResponse()的参数,响应给客户端. 存在的 ...

  4. Django模板用法

    django模板原理 # 创建template对象,由context对象传递template所需要的值, 有render方法进行模板的呈现 # 写模板,创建 Template 对象,创建 Contex ...

  5. django模板过滤器

    django模板&过滤器 声明:部分信息来源这篇博客https://www.cnblogs.com/maple-shaw/articles/9333821.html MVC: 模型(model ...

  6. python django 模板

    1 用两个大括号括起来的文字{{person_name}} 称为变量 2 被 大括号和面分号包围的文件({% if ordered_warranty %})是模板标签 3 过滤器是用管道符(|) 和U ...

  7. Django—模板渲染

    参考文档: http://www.cnblogs.com/fnng/p/4373108.html https://code.ziqiangxuetang.com/django/django-intro ...

  8. Django模板语言(译)

    原文地址:https://docs.djangoproject.com/zh-hans/2.1/ref/templates/language/ 翻译日期:2019年3月8日-2019年3月9日 by: ...

  9. Django 3.2.5博客开发教程:体验django模板

    上面我们有说过,用户发送请求的时候,视图会返回一个响应,响应可以是一个重定向,一个404错误,一个XML文档,一张图片或者是一个HTML内容的网页.前面几个返回的信息比较有限,我们重点更多是放在HTM ...

最新文章

  1. MySQL出现同步延迟有哪些原因?如何解决?
  2. 有一台电脑怎么挣钱_大聪明,双十一我想6000元配置一台能畅玩主流游戏的电脑,应该怎么搭配?...
  3. ~/.fcitx/config
  4. android图片跳转动画效果,Android实现Activity界面切换添加动画特效的方法
  5. 服务器事件刷新消息,Windows Server 2003 中的 DNS 事件消息 1616 到 6702
  6. 2021CVPR冠军图像分割算法全解密
  7. React Native 轻松集成分享功能( iOS 篇)
  8. 日期setHours()方法以及JavaScript中的示例
  9. vim 中代码的折叠和打开
  10. 苹果电脑连服务器传文件慢,两个mac之间快速传递文件
  11. jQuery基础(3)- ajax
  12. Ubuntu13.04配置优化(一)转贴
  13. 软件工程 第三章 需求分析
  14. MAC中生成SSH key
  15. 将原神角色导入unity 完整版
  16. win10的开机启动文件夹
  17. 兄弟连 linux 学习记录
  18. python智慧树判断题_智慧树_Python数据分析与数据可视化_判断题答案
  19. MES系统的实施准备,将MES系统导入到企业的运作体系之中
  20. 前端利器CodePen和Scrimba了解一下

热门文章

  1. 在kotlin companion object中读取Bean,注入Bean对象
  2. 2022-2028年中国自动化设备市场研究及前瞻分析报告
  3. 2022-2028中国空中互联网系统市场现状及未来发展趋势报告
  4. mybatis配置文件解析
  5. tensor转换 pytorch tensorflow
  6. 笔记本电脑的有线和无线网络同时使用,如何设置?
  7. 如何通过HTTP优雅调用第三方-Feign
  8. 使用汇编语言编写第一个程序
  9. ResNet网络的训练和预测
  10. MinkowskiPooling池化(上)