功能

  • 产生html,且不仅仅是一个html 包含:

    • 静态内容:html,css,js
    • 动态内容:模板语言

使用

  • 一般使用 Django中提供的简写函数render调用模板
  • render(request,'XXX.html',{XX,XX})

模板语言(DTL)

  • 变量

  • 语法:{{ 变量 }}
  • 变量名必须由字母、数字、下划线(不能以下划线开头)和点组成
  • 解析顺序:当变量中有点.的时候 解析顺序如下:
    • 把点前面的部分当成字典,点后面的当成key
    • 把点前面的当成对象,点后面的当成属性
    • 把点前面的当成对象,点后面的当成对象的方法
    • 如果点后面数字,把点前面当成列表,点后面当成下标
    • 都取不到值,就将变量设为空字符串
  • 标签(tags)

  • 语法:{%  代码段  %}
    • for标签

      • {%for item in 列表%}
      • 循环逻辑
      • {{forloop.counter}}表示当前是第几次循环,从1开始
      • {%empty%}
      • 列表为空或不存在时执行此逻辑
      • {%endfor%}
    • if标签
      • {%for item in 列表%}
      • 循环逻辑
      • {{forloop.counter}}表示当前是第几次循环,从1开始
      • {%empty%}
      • 列表为空或不存在时执行此逻辑
      • {%endfor%}
  • 比较运算符如下:==、!=、<、>、<=、>=
    • 注意:运算符左右两侧必须有空格
  • 布尔运算符如下:and、or、not
  • 过滤器(filter)

  • 对常量进行一些操作,可以用过滤器,语法如下:
  • 变量|过滤器:参数
  • 常用的过滤器有:date,default,length等,具体可参考Django文档
  • 内置模板标签和过滤器 | Django 文档 | Djangohttps://docs.djangoproject.com/zh-hans/3.2/ref/templates/builtins/#ref-templates-builtins-filters
  • 自定义模板标签和过滤器

    • 共需要5步
    1. 在应用中创建templatetags目录。(添加 templatetags 模块后,需要重启服务器)
    2. 在上面目录中创建__init__.py 和模块名.py 文件。(要自定义的 tags或filters模块)
    3. 导入模块,创建一个Library对象,用于装饰自定义的过滤器
      from django import template
      register = template.Library()
    4. 编写自定义的函数,并用上面装饰器进行装饰注册。(函数至少接受1个最多接受2个参数)
      @register.filter
      def XXX(num,[]):
      return XXX
    5. 在html模板中加载自定义的过滤器
      {% load 模块名 %}
  • 注释

  • 在模板中使用模板注释,注释的代码不会被编译,不会输出到客户端;与html注释不同的是html注释只能注释html内容,不能注释模板语言,且会输出到客户端。
    1. 单行注释语法:  {#...#}
    2. 多行注释使用comment标签,语法:{%comment%}...{%endcomment%}

模板继承

  • 主要是为了提高代码重用,减轻开发人员的工作量
  • 典型应用:网站的头部、尾部信息

父模板

  • 如果发现在多个模板中复制一段代码,那就应该把这段内容定义到父模板中
  • 标签block:用于在父模板中预留区域,留给子模板填充差异性的内容,名字不能相同
  • 为了更好的可读性,建议给endblock标签写上名字,这个名字与对应的block名字相同
  • 父模板中也可以使用上下文中传递过来的数据
{%block 名称%}
预留区域,可以编写默认内容,也可以没有默认内容
{%endblock 名称%}

子模板

  • 标签extends:继承,写在子模板文件的第一行
{% extends "父模板名称.html"%}
  • 子模版不用填充父模版中的所有预留区域,如果子模版没有填充,则使用父模版定义的默认值
  • 填充父模板中指定名称的预留区域
{%block 名称%}
实际填充内容
{{block.super}}用于获取父模板中block的内容
{%endblock 名称%}

HTML转义

  • 出于安全考虑,模板对上下文传递的字符串进行输出时,会对以下字符自动转义

    小于号< 转换为&lt;

    大于号> 转换为&gt;

    单引号' 转换为'

    双引号" 转换为 &quot;

    与符号& 转换为 &amp;

  • 关闭转义主要有2种方法:

    • 单个变量可以用过滤器safe:{{变量|safe}}
    • 设置一段代码都禁用转义,使用标签autoescape:接受on、off参数

{%autoescape off%}
                ...
                {%endautoescape%}


CSRF

  • CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造。
  • 重要信息如金额、积分等,采用POST方式传递
  • 启用CSRF中间件,默认启用
  • 在form表单中加入标签{% csrf_token  %}
  • 如果不个别视图关闭csrf验证可以用装饰器
  • from django.views.decorators.csrf import csrf_exempt
    
    @csrf_exempt
    def getip(request):
    pass

反向解析

  • 作用:

    • 从相应的 Django 视图标识以及要传递给它的参数来获取相关联的 URL
    • 当一个url配置的地址发生改变时,页面上使用反向解析生成地址的位置不需要变化
  • 实现步骤

    • 在 项目/urls.py 中为include定义namespace属性
      url(r'^',include('app.urls',namespace='app'))
    • 在app/urls.py中 设置app名字
      app_name = 'app'
    • 在app/urls.py中为url定义name属性
      url(r'^test/$', views.test,name='test')
  • 使用

  • 在模板里:使用 url 模板标签。{%url 'namespace:name'  [a[=x]  b[=x]] %}
  • 在 Python 编码:使用 reverse() 函数。reverse('namespace:name', kwargs={'a':x,'b':y})
    • reverse 函数导入
      from django.urls import reverse

Django边学边记—模板的更多相关文章

  1. Django边学边记——中间件

    特点 Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,用于全局修改Django的输入或输出. 每个中间件组件负责做一些特定的功能.中间件全部注册在sett ...

  2. Django边学边记—静态文件

    概念 项目中的CSS.图片.js都是静态文件 一般会将静态文件放到一个单独的目录中,以方便管理 在html页面中调用时,也需要指定静态文件的路径,Django中提供了一种解析的方式配置静态文件路径 静 ...

  3. Django边学边记—新手Django建项目各流程细节

    一.准备虚拟环境 1)安装 virtualenv pip install virtualenv 2)virtualenvwrapper pip install virtualenvwrapper-wi ...

  4. Django边学边记—视图

    一. url (一)配置 在项目/settings.py中通过ROOT_URLCONF指定url配置 ROOT_URLCONF = 'XXXX.urls' 打开 项目/urls.py 配置 (二)语法 ...

  5. Django边学边记—模型查询

    查询集 两大特性 惰性执行:创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代.序列化.与if合用 缓存:查询集的结果被存下来之后,再次查询时会使用之前缓存的数据 返回列 ...

  6. Django边学边记--状态保持(cookie和session)

    Cookie 概念: Cookie,也叫Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密),好比会员卡或餐票. 特点: Cookie是由服务 ...

  7. Django基础,Day10 - template 模板引擎与路径设置

    作为一个Web框架,Django需要一个方便的方式来生成动态的HTML.最常见的方法依赖于模板.模板包含所需的HTML输出的静态部分以及一些特殊的语法描述如何插入动态内容. Django框架后端默认支 ...

  8. django在视图中使用模板

    在视图中使用模板   在学习了模板系统的基础之后,现在让我们使用相关知识来创建视图. 重新打开我们在前一章在 mysite.views 中创建的 current_datetime 视图. 以下是其内容 ...

  9. Django加载静态网页模板

    Django加载静态网页模板 步骤: 第一步:在子系统blog根目录下新建模版目录templates,里面新建一个login.html <!DOCTYPE html> <html l ...

随机推荐

  1. sqli-labs lesson 32-37

    宽字节注入: 原理:mysql在使用GBK编码的时候,会认为两个字符为一个汉字,例如%aa%5c就是一个汉字(前一个ascii码大于128才能到汉字的范围).我们在过滤 ' 的时候(也就是从防御的角度 ...

  2. Linux搭建Ldap服务器

    一,服务器安装 yum install -y openldap openldap-clients openldap-servers migrationtools 二,配置ldap服务器 2.1配置ld ...

  3. NOIP 模拟 9 数颜色

    题解 一道裸的数据结构题 正解是排序 \(+\) 二分,但是这怎么能有动态开点线段树好写呢? 于是我就打了暴力,骗了五十分. 对于每种颜色,我们在下标上开一颗线段树,对于交换若颜色相同则跳过,否则直接 ...

  4. linux 下文件的权限

  5. linnux安装多台redis

    安装: 1.获取redis资源 wget http://download.redis.io/releases/redis-4.0.8.tar.gz 2.解压 tar xzvf redis-4.0.8. ...

  6. servlet+Ajax开发web工程

    前言 因为目前基本已经不会再用到servlet+jsp开发项目了,基本都是使用框架来开发:我们常用的框架都是基于servlet来封装的,该阶段只需要了解一下tomcat如何使用,servlet的生命周 ...

  7. k8s 探针 exec多个判断条件条件 多个检测条件

    背景 1,之前我们的yaml文件里面有就绪探针. 2,探针是检测一个文件是否生成,生成了说明服务正常. 3,现在要加一个检测,也是一个文件是否存在并且不为空. 4,只有两个条件同时满足了 服务才算正常 ...

  8. 痞子衡嵌入式:MCUXpresso Config Tools初体验(Pins, Clocks, Peripherals)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MCUXpresso Config Tools三大件(Pins, Clocks, Peripherals). 不知道大家有没有这样的感受 ...

  9. skynet 开启 https 配置

    修改 Makefile Mac 下: # https : turn on TLS_MODULE to add https support TLS_MODULE=ltls TLS_LIB="$ ...

  10. 小程序 mpvue page "xxx" has not been registered yet

    新增了几个页面,改了下目录结构,就开始报这个错. 重启了几次不管用,google 一番也无果. 灵机一动试一下 build npm run build build 版本没报错,OK 然后 $ rm - ...