模板

1. 简介

  • 模板由HTML代码和逻辑控制代码构成
  • 同一个模板,可以有多个上下文,就可以通过穿件模板对象来渲染多个上下文
  • 创建一个模板就可以多次调用render()方法来渲染上下文
  • Django模板解析工作都是在后台通过对正则表达式一次性调用来完成

2. 语法

2.1 模板继承

include(继承) 模板标签

  • {% include %} 是一个内建模板标签,允许在模板中包含其他的模板内容
  • 标签的参数是所要包含的模板的名称,可以是一个变量,也可以是单/爽引号硬编码的字符串
  • 在多个模板中出现相同的代码时,应该考虑使用{% include %}来减少代码重复

extend(继承) 模板标签

1. 定义母版	{% block title %}......{% endblock %}
2. 定义子板
{% extends "base.html" %} <!--继承母版的内容,且必须放在模板第一行-->
{% block title %}{% endblock %} <!--所继承的盒子的内容-->
{% csrf_token %} <!--取消csrf安全保护-->
{{ block.super }} <!--继承父模板中的内容-->
{% include "小组件路径" %} <!--HTML出现相同的代码时,新建公用小组件HTML文件-->
  • 模板继承是先构造一个基础模板,而后在子模板中对部分块进行重载
  • 在模板中使用{% extends %},须保证其为模板中的第一个标记,否则模板不起作用
  • 一个模板中不能定义多个同名的{% block %}
  • block标签的工作方式是双向的,block标签定义了在父模板中{% block %}
  • 父模板中不能出现两个相同名称的{% block %}标签
  • 需要访问父模板中的块的内容,使用{{ block.super }}标签继承父模板中的内容

2.2 模板语言的控制语句

  • for 标签:

    循环遍历可迭代变量中的每一个元素,没有break和continue等复杂功能,相关操作类比python。

    <!--遍历列表-->
    {% for name in name_list %}
    <li>{{ name }}</li>
    {% endfor %}
    <!--反向遍历-->
    {% for name in name_list reversed %}
    <li>{{ name }}</**li**>
    {% endfor %}
    <!--列表中字典取值-->
    {% for info_dic in name_list %}
    <li>{{ info_dic.name }}</li>
    {% endfor %}
    <!--遍历字典-->
    {% for k,v in info_dict.items %}
    <li>{{ k }}:{{ v }}</li>
    {% endfor %}
  • for…empty…:

    for遍历一个空的变量或者未找到时执行empty

    {% for info_dic in name_list %}
    <li>{{ info_dic.name }}</li>
    {% empty %}
    <p>给出的变量为空或者未找到!</p> 
    {% endfor %}
  • if 标签:

    ​ 判断变量的逻辑值是进行选择性的输出,前后必须要有空格

    ​ 类比python < = > <= >= != == and or not not in is is not

    {% if num > 100 %}
    <h1>大于100</h1>
    {% elif num < 100 %}
    <h1>小于100</h1>
    {% else %}
    <h1>等于100</h1>
    {% endif %}
  • with 标签:

    ​ 多用于给一个复杂的变量起别名

    ​ 注意:等号左右不要加空格。

    {% with total=business.employees.count %}
    {{ total }} <!--只能在with语句体内用-->
    {% endwith %}
    <!--或-->
    {% with business.employees.count as total %}
    {{ total }}
    {% endwith %}
  1. url语句

    url标签中使用模板变量和普通标签参数一样,空格隔开,{{ % url 别名 %}}即可。

    {% url 'index' %} <!--映射到name为index的请求路径-->
  2. load语句

    加载静态资源

    <!--静态资源路径-->
    {% static %}
    {% load static %}
    <img src="{% static "images/hi.jpg" %}" alt="Hi!" />
    <!--引用JS文件时使用:-->
    {% load static %}
    <script src="{% static "mytest.js" %}"></script>
    <!--某个文件多处被用到可以存为一个变量-->
    {% load static %}
    {% static "images/hi.jpg" as myphoto %}
    <img src="{{ myphoto }}"></img> <!--动态获取静态资源路径-->
    {% get_static_prefix %}
    {% load static %}
    <img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" />
    <!--或者-->
    {% load static %}
    {% get_static_prefix as STATIC_PREFIX %}
    <img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!" />
    <img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!" />
  3. csrfr_token标签

    {% csrf_token %}

    用于生成csrf_token的标签,用于防治跨站攻击验证

    如果view的index里用的是render_to_response方法,则不会生效

    其实质是生成一个input标签,然后与其他标签一起提交给后台

  4. verbatin语句

    阻止模板语言的渲染

    <!--禁止render,原样渲染-->
    {% verbatim %}
    {{ hello }}
    {% endverbatim %}
  5. 自定义filter和simply_tag

    自定义filter

    1. 首先在某个app中,创建一个python包,叫做templatetags,注意,这个包的名字必须为templatetags,不然就找不到。

    2. 在这个templatetags包下面,创建一个python文件用来存储过滤器。

    3. 在新建的python文件中,定义过滤器(也就是函数),这个函数的第一个参数永远是被过滤的那个值,并且如果在使用过滤器的时候传递参数,那么还可以定义另外一个参数。但是过滤器最多只能有2个参数。

    4. 在写完过滤器(函数)后,要使用django.template.Library.filter进行注册。

      from Django import template
      register= template.Library()
      defgreet(value,word):
      return value + word
      register.filter(“greet“(注册名称),greet)
    5. 还要把这个过滤器所在的这个app添加到settings.INSTALLED_AAPS中(如果创建应用时已经添加过,就省略这一步)

    6. 在模板中使用load标签加载过滤器所在的python包。

    7. {% load [自定义过滤器的文件名] %}

    自定义simply_tag

    1. 在APP下面创建一个包。比如:template_tag并在包内创建比如:xx.py文件。

      from django import template
      register = template.Library() @register.simple_tag
      def my_simple_time(v1):
      return v1*1000
    2. 在setting中修改。INSTALLAPP加上创建的包名。

    3. 在html里加一句{%load template_tag%}在合适的位置使用标签{{ my_simple_time 参数 }}

2.3 变量的过滤器(filter)的使用

格式

{{ obj | filter : param}}

参数

  • add过滤器:

    • value与参数相加,若不能转换成int,则返回空
  • cut过滤器:
    • 移除value中所有指定的字符串。类似于python中的replace()
  • date过滤器:
    • date将一个日期按照指定的格式,格式化成字符串。
    • Y:四位数字年份;m:两位数字月份;n:月份;d:两位数字的天;j:天;g:12小时制的小时;G:24小时制的小时;h:12小时制两位数的小时;H:24小时制两位数的小时;i:分钟;s:秒
  • default过滤器:
    • 如果value为False([],"",None,{},()),则返回参数
  • default_if_none过滤器:
    • 如果value为None,则返回参数
  • first和last过滤器:
    • first返回列表/元组/字符串中的第一个元素。
    • last返回列表/元组/字符串中的最后一个元素。
  • floatformat过滤器:
    • floatformat使用四舍五入的方式返回一个浮点类型;参数为X,则保留X位小数。
  • join过滤器:
    • 类似与Python中的join,将列表/元组/字符串用指定的字符进行拼接。
  • length过滤器:
    • 获取一个列表/元组/字符串/字典的长度。
  • lower和upper过滤器:
    • lower将value中所有的字符全部转换成小写。
    • upper将value中所有的字符全部转换成大写。
  • random过滤器:
    • 从value中随机选择一个值。
  • safe过滤器:
    • 关闭字符串的自动转义,如果value是一串html代码,那么将会把这个html代码渲染到浏览器中。
  • slice过滤器:
    • 类似于python中的切片。
  • striptags过滤器:
    • 删除字符串中所有的html标签。
  • truncatechars过滤器:
    • 参数限制了value的长度,最后一个参数以...作为省略号。
  • truncatechars_html过滤器
    • 与truncatechars类似,但不会去掉html标签

02.Django-模板的更多相关文章

  1. Django模板语言相关内容

    Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 在Django的模板语言中按此语法使用:{{ 变量名 ...

  2. Django—模板

    索引 一.模板语言 1.1 变量 1.2 标签 1.3 过滤器 1.4 自定义过滤器 1.5 注释 二.模板继承 三.HTML转义 四.CSRF 五.验证码 六.反向解析 模板 作为Web框架,Dja ...

  3. Django模板语言初识

    一.Django框架简介 1.MVC框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控 ...

  4. Django模板语言(常用语法规则)

    Django模板语言 The Django template language 模板中常用的语法规则 {最新版本的Django语法可能有改变,不支持的操作可能支持了.[HTML教程 - 基本元素/标签 ...

  5. Django 模板语言 标签

    前言:django的模板语法基本和flask的jinja2基本一样.下面比较一下两个模板语法的区别. ------深度变量的查找(万能的句点号) 在 Django 模板中遍历复杂数据结构的关键是句点字 ...

  6. Django模板语言,过滤器整理

    Django模板语言,过滤器整理 1. add {{ value|add:"2" }} 把add后的参数加给value: 处理时,过滤器首先会强制把两个值转换成Int类型. 如果强 ...

  7. Django模板常用语法规则

    Django 模板标签 if/else 标签 for 标签 ifequal/ifnotequal 标签 注释标签 过滤器 include 标签 URL标签 模板继承   if/else 标签 1. 基 ...

  8. Django模板语言, 过滤器整理

    Django模板语言,过滤器整理 1. add {{ value|add:"2" }} 把add后的参数加给value: 处理时,过滤器首先会强制把两个值转换成Int类型. 如果强 ...

  9. Django框架02 /Django下载安装、url路由分发

    Django框架02 /Django下载安装.url路由分发 目录 Django框架02 /Django下载安装.url路由分发 1. django下载安装 2. pycharm创建项目 3. 基于D ...

  10. Django模板与Vue.js冲突问题

    参考: https://my.oschina.net/soarwilldo/blog/755984 方法1:修改vue.js的默认的绑定符号 Vue.config.delimiters = [&quo ...

随机推荐

  1. 数据库SQL语言从入门到精通--Part 3--SQL语言基础知识

    数据库从入门到精通合集(超详细,学习数据库必看) 一.关系 单一的数据结构----关系 现实世界的实体以及实体间的各种联系均用关系来表示 逻辑结构----二维表 从用户角度,关系模型中数据的逻辑结构是 ...

  2. TensorRT入门

    本文转载于:子棐之GPGPU 的 TensorRT系列入门篇 学习一下加深印象 Why TensorRT 训练对于深度学习来说是为了获得一个性能优异的模型,其主要的关注点在与模型的准确度.精度等指标. ...

  3. CF786B Legacy(线段树优化建边)

    模板题CF786B Legacy 先说算法 如果需要有n个点需要建图 给m个需要建边的信息,从单点(或区间内所有点)向一区间所有点连边 如果暴力建图复杂度\(mn^2\) 以单点连向区间为例,在n个点 ...

  4. http抓包—Content-Type讲解

    1.Content-Type的定义 Content-Type(MediaType),即是Internet Media Type,互联网媒体类型,也叫做MIME类型.在互联网中有成百上千中不同的数据类型 ...

  5. 题目分享P

    题意: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双方轮流进行 操作.当一方操作时,他们需要先选择一个不为根的 ...

  6. 蓝桥杯2019初赛]迷宫(dfs版本)

    传送门 大意: 题目的意思还是模板的搜索,不同的是我们要记录路径了,而且是最短字典序最小的路径. 思路: 1.对于字典序最小,也就是说我们要尽量先往下走,然后是左- 这个很简单,因为在dfs中是顺序枚 ...

  7. 多重背包转化成完全背包 E - Charlie's Change

    http://poj.org/problem?id=1787 这个题目我一看就觉得是一个多重背包,但是呢,我不知道怎么输出路径,所以无可奈何,我就只能看一下题解了. 看了题解发现居然是把多重背包转化成 ...

  8. hue搭建

    1.安装依赖: sudo yum -y install gcc-c++ asciidoc cyrus-sasl-devel cyrus-sasl-gssapi krb5-devel libxml2-d ...

  9. sshd: no hostkeys available — exiting

    在开启SSHD服务时报错.sshd re-exec requires execution with an absolute path用绝对路径启动,也报错如下:Could not load host ...

  10. 【Elasticsearch学习】文档搜索全过程

    在ES执行分布式搜索时,分布式搜索操作需要分散到所有相关分片,若一个索引有3个主分片,每个主分片有一个副本分片,那么搜索请求会在这6个分片中随机选择3个分片,这3个分片有可能是主分片也可能是副本分片, ...