02.Django-模板
模板
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
<=><=>=!===andornotnot inisis 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 %}
url语句
url标签中使用模板变量和普通标签参数一样,空格隔开,{{ % url 别名 %}}即可。
{% url 'index' %} <!--映射到name为index的请求路径-->
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!" />
csrfr_token标签
{% csrf_token %}
用于生成csrf_token的标签,用于防治跨站攻击验证
如果view的index里用的是render_to_response方法,则不会生效
其实质是生成一个input标签,然后与其他标签一起提交给后台
verbatin语句
阻止模板语言的渲染
<!--禁止render,原样渲染-->
{% verbatim %}
{{ hello }}
{% endverbatim %}
自定义filter和simply_tag
自定义filter
首先在某个app中,创建一个python包,叫做
templatetags,注意,这个包的名字必须为templatetags,不然就找不到。在这个
templatetags包下面,创建一个python文件用来存储过滤器。在新建的python文件中,定义过滤器(也就是函数),这个函数的第一个参数永远是被过滤的那个值,并且如果在使用过滤器的时候传递参数,那么还可以定义另外一个参数。但是过滤器最多只能有2个参数。
在写完过滤器(函数)后,要使用
django.template.Library.filter进行注册。from Django import template
register= template.Library()
defgreet(value,word):
return value + word
register.filter(“greet“(注册名称),greet)
还要把这个过滤器所在的这个app添加到
settings.INSTALLED_AAPS中(如果创建应用时已经添加过,就省略这一步)在模板中使用
load标签加载过滤器所在的python包。{% load [自定义过滤器的文件名] %}
自定义simply_tag
在APP下面创建一个包。比如:
template_tag并在包内创建比如:xx.py文件。from django import template
register = template.Library() @register.simple_tag
def my_simple_time(v1):
return v1*1000
在setting中修改。
INSTALLAPP加上创建的包名。在html里加一句
{%load template_tag%}在合适的位置使用标签{{ my_simple_time 参数 }}
2.3 变量的过滤器(filter)的使用
格式
{{ obj | filter : param}}
参数
- add过滤器:
- value与参数相加,若不能转换成int,则返回空
- cut过滤器:
- 移除value中所有指定的字符串。类似于
python中的replace()。
- 移除value中所有指定的字符串。类似于
- 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-模板的更多相关文章
- Django模板语言相关内容
Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 在Django的模板语言中按此语法使用:{{ 变量名 ...
- Django—模板
索引 一.模板语言 1.1 变量 1.2 标签 1.3 过滤器 1.4 自定义过滤器 1.5 注释 二.模板继承 三.HTML转义 四.CSRF 五.验证码 六.反向解析 模板 作为Web框架,Dja ...
- Django模板语言初识
一.Django框架简介 1.MVC框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控 ...
- Django模板语言(常用语法规则)
Django模板语言 The Django template language 模板中常用的语法规则 {最新版本的Django语法可能有改变,不支持的操作可能支持了.[HTML教程 - 基本元素/标签 ...
- Django 模板语言 标签
前言:django的模板语法基本和flask的jinja2基本一样.下面比较一下两个模板语法的区别. ------深度变量的查找(万能的句点号) 在 Django 模板中遍历复杂数据结构的关键是句点字 ...
- Django模板语言,过滤器整理
Django模板语言,过滤器整理 1. add {{ value|add:"2" }} 把add后的参数加给value: 处理时,过滤器首先会强制把两个值转换成Int类型. 如果强 ...
- Django模板常用语法规则
Django 模板标签 if/else 标签 for 标签 ifequal/ifnotequal 标签 注释标签 过滤器 include 标签 URL标签 模板继承 if/else 标签 1. 基 ...
- Django模板语言, 过滤器整理
Django模板语言,过滤器整理 1. add {{ value|add:"2" }} 把add后的参数加给value: 处理时,过滤器首先会强制把两个值转换成Int类型. 如果强 ...
- Django框架02 /Django下载安装、url路由分发
Django框架02 /Django下载安装.url路由分发 目录 Django框架02 /Django下载安装.url路由分发 1. django下载安装 2. pycharm创建项目 3. 基于D ...
- Django模板与Vue.js冲突问题
参考: https://my.oschina.net/soarwilldo/blog/755984 方法1:修改vue.js的默认的绑定符号 Vue.config.delimiters = [&quo ...
随机推荐
- Python网络数据采集- 创建爬虫
1. 初见网络爬虫 1.1 网络连接 输出某个网页的全部 HTML 代码. urllib 是 Python 的标准库(就是说你不用额外安装就可以运行这个例子),包含了从网络请求数据,处理 cookie ...
- Java中的动态定义数组
1.一维矩阵的动态定义(代码注释) 1.1方法一 package dongtai; import java.util.Scanner; import java.util.ArrayList; publ ...
- 【Scala】利用Akka的actor编程模型,实现2个进程间的通信
文章目录 步骤 一.创建maven工程,导入jar包 二.master进程代码开发 三.worker进程代码开发 四.控制台结果 步骤 一.创建maven工程,导入jar包 <propertie ...
- 【Hadoop离线基础总结】MapReduce 社交粉丝数据分析 求出哪些人两两之间有共同好友,及他俩的共同好友都有谁?
MapReduce 社交粉丝数据分析 求出哪些人两两之间有共同好友,及他俩的共同好友都有谁? 用户及好友数据 A:B,C,D,F,E,O B:A,C,E,K C:F,A,D,I D:A,E,F,L E ...
- PI/PO Token配置
接收方通道配置 因为本例中需要在访问业务接口时,获取某平台的TOKEN认证,并在调用业务接口时,将TOKEN一同传给某平台,但是不能放在请求参数中,而是放在HTTP的Headers 注意!是Heade ...
- Kitty Cloud(HTTP_RPC)的全局异常处理
项目地址 https://github.com/yinjihuan/kitty-cloud 异常处理不用我讲,大家都清楚.单独的异常处理太繁琐,全局异常处理可以在一个应用中统一进行异常的处理,非常方便 ...
- [hdu5266]区间LCA
题意:给一棵树,求节点L,L+1,...R的最近公共祖先 思路:先对树dfs一下,从根1出发,经过每条边时记录一下终点和到达这个点的时间截,令r[u]表示到达u这个节点的最早时间截,t[x]表示在时间 ...
- (mysql)数据库笔记
一.数据库的特点: a.实现数据共享 b.采用特定的数据类型. c.具有较高的数据独立性 d.具有统一的数据控制功能. 二.mysql的优势: a.速度:运行速度快 b.价格:mysql对多数个人来 ...
- MySQL++:Liunx - MySQL 主从复制
目标:搭建两台MySQL服务器,一台作为主服务器,一台作为从服务器,实现主从复制 环境:虚拟机 主数据库:192.168.211.101 从数据库:192.168.211.102 MySQL 安装可参 ...
- 【雕爷学编程】Arduino动手做(63)---TCS3200D颜色识别传感器
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...