模板

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. HDU 1421 搬寝室 解题报告(超详细)

    **搬寝室 Time Limit: 2000/1000 MS Memory Limit: 65536/32768 K Problem Description 搬寝室是很累的,xhd深有体会.时间追述2 ...

  2. [bzoj2427]P2515 [HAOI2010]软件安装(树上背包)

    tarjan+树上背包 题目描述 现在我们的手头有 \(N\) 个软件,对于一个软件 \(i\),它要占用 \(W_i\) 的磁盘空间,它的价值为 \(V_i\).我们希望从中选择一些软件安装到一台磁 ...

  3. python(读取 excel 操作 xlrd 模块)

    一.安装 xlrd 模块 到 python 官网下载 http://pypi.python.org/pypi/xlrd 模块安装,前提是已经安装了 python 环境. 或者在 cmd 窗口  pip ...

  4. Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码

    目录 Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码 前言 工欲善其事必先利其器.学习和深读Spring源码一个重要的前提:编译源码到我们的本地环境.这 ...

  5. 0x01-Linux常用文件处理命令

    0x01-Linux常用文件处理命令 摘要 文件可以说是占据了Linux系统半壁江山,那么,我们理所应当要认识文件,且还要懂得如何创建.查看文件(touch.cat命令).既然是使用Linux,当然是 ...

  6. xml出现Exception in thread "main" java.lang.NullPointerException

    运行代码出现Exception in thread "main" java.lang.NullPointerException 可以看下这个链接:https://ask.csdn. ...

  7. D - Silver Cow Party J - Invitation Cards 最短路

    http://poj.org/problem?id=3268 题目思路: 直接进行暴力,就是先求出举行party的地方到每一个地方的最短路,然后再求以每一个点为源点跑的最短路. 还有一种方法会快很多, ...

  8. ASP.NET Core Blazor 初探之 Blazor WebAssembly

    最近Blazor热度很高,传说马上就要发布正式版了,做为微软脑残粉,赶紧也来凑个热闹,学习一下. Blazor Blazor是微软在ASP.NET Core框架下开发的一种全新的Web开发框架.Bla ...

  9. Java BC包做sm2加密方法 ,签名验签方法

    package com.sdyy.common.bc_sm2; import org.bouncycastle.jcajce.provider.asymmetric.x509.CertificateF ...

  10. react中dangerouslySetInnerHTML使用

    在react中,通过富文本编辑器进行操作后的内容,会保留原有的标签样式,并不能正确展示. 在显示时,将内容写入__html对象中即可.具体如下: <div dangerouslySetInner ...