模板

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. CodeForces - 260C

    CodeForces - 260C Little Vasya had n boxes with balls in the room. The boxes stood in a row and were ...

  2. [LOJ2865] P4899 [IOI2018] werewolf 狼人

    P4899 [IOI2018] werewolf 狼人 LOJ#2865.「IOI2018」狼人,第一次AC交互题 kruskal 重构树+主席树 其实知道重构树的算法的话,难度就主要在主席树上 习惯 ...

  3. 金钱货币用什么类型--(Java)

    0.前言 项目中,基本上都会涉及到金钱:那么金钱用什么数据类型存储呢? 不少新人都会认为用double,因为它是双精度类型啊,或者float, 其实,float和double都是不能用来表示精确的类型 ...

  4. python-CSV格式清洗与转换、CSV格式列变换、CSV格式数据清洗【数据读入的三种方法】【strip、replace、split、join函数的使用】

    1)CSV格式清洗与转换 描述 附件是一个CSV格式文件,提取数据进行如下格式转换:‪‬‪‬‬‪‬‮‬‪‬‭‬ (1)按行进行倒序排列:‪‬‪‬‪‬‪‬‪‬‮‬‬‪‬‮‬‪‬‭‬ (2)每行数据倒序排 ...

  5. Java——接口相关知识

    1.接口用interface来声明 //定义一个动物接口 public interface Animal{ public void eat(); public void travel(); } 2.接 ...

  6. E. Paint the Tree 树形dp

    E. Paint the Tree 题目大意:给你一棵树,每一个点都可以染k种颜色,你拥有无数种颜色,每一种颜色最多使用2次,如果一条边的两个节点拥有同一种颜色,那么就说 这条边是饱和的,一个树的价值 ...

  7. GitHub 热点速览 Vol.19:如何叩响大厂的门?

    作者:HelloGitHub-小鱼干 摘要:进大厂,无疑是升职加薪走上人生巅峰的一个敲门砖,那,如何拿到这个敲门砖呢?前辈的经验之谈,无疑会给我们进大厂带来许多的经验参考,本周的#大厂面试经验之谈#主 ...

  8. FZU2105 线段树 (按位操作)

    题目: Given N integers A={A[0],A[1],...,A[N-1]}. Here we have some operations: (元素和操作元素 < 16) Opera ...

  9. Nginx下的location,upstream,rewrite 和 proxy_pass使用总计大全

    一 . location: 顾名思义-->地址,也叫路由. nginx服务器非常核心的配置,一般nginx运维人员在修改nginx配置时,大部分也是围绕着location这个配置进行修改. 下面 ...

  10. 不同版本(2.3/2.4/2.5/3.0/3.1)web.xml头信息

    Web App 3.1 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http:// ...