Django模板系统-内置和自定义Filters
django模板中最常用的两种特殊符号是 {{ }} 用来表示变量和 {% %} 用来表示逻辑相关的操作
变量
{{ 变量名 }} ,由字母数字下划线组成而.
在模板语言中有特殊含义,用来获取对象相应的属性值
【举例】
在view中进行定义
def jjzz(request):
l = [1,2,3]
d = {"name":"jjzz"}
class Hero(object):
def __init__(self,name,age):
self.name = name
self.age = age
def attack(self):
return f"{self.name} is attacking ..."
gailun = Hero(name='gailun',age=23)
zhaoxin = Hero(name='zhaoxin',age=24)
nvjing = Hero(name="kaiselin",age=22)
hero_list = [gailun,zhaoxin,nvjing]
return render(request,"jjzz.html",{"l":l,"d":d,"hero_list":hero_list})中HTML支持的写法
HTML中的基础用法
<body>
{# 获取列表l中的元素 #}
<p>第一个元素:{{ l.0 }}</p>
<p>第三个元素:{{ l.2 }}</p>
{# 获取字典d中的key #}
<p>获取d中的name:{{ d.name }}</p>
{# 获取Hero对象的name属性 #}
<p>{{ hero_list.0.name }}</p>
{# 使用 . 只能调用不带参数的方法#}
<p>{{ hero_list.1.attack }}</p>
</body>
【注意】
当模板系统遇到.
时,会按照如下的顺序去查询:
在字典中查询
属性或者方法
数字索引
内置Filters
过滤器,用来修饰变量的显示结果
语法 {{ 变量名|过滤器名:参数 }} 注意:
两边不能有空格,过滤器与给过滤器的参数是一个整体,而且过滤器只能有一个参数
default
定义变量的默认值,在没有传递变量或者参数没有定义(不存在或者为空)时,使用默认值
{{ value|default_name:"nothing"}} # 如果value值没有没传的话就显示nothing
源码解释:
@register.filter(is_safe=False)
def default(value, arg):
"""If value is unavailable, use given default."""
return value or arg
【注意】在settings中的TEMPLATES的OPTIONS可以增加一个选项:string_if_invalid:'找不到',可以替代default的的作用,优先级高于直接设置default。
default_if_none
使用形式: {{ value | default_if_none:"nothing" }} ,
意义:如果value是None,那么输出将是nothing.
源码解释
@register.filter(is_safe=False)
def default_if_none(value, arg):
"""If value is None, use given default."""
if value is None:
return arg
return value
【与default的区别】
None:不存在即为空,'',None
unavailable:None,False,[],{},''等都可以算是不可用
符号 | defaul:"noting" | default_if_none:"noting" |
---|---|---|
{} | noting | {} |
"" | noting | noting |
None | noting | noting |
[] | noting | [] |
False | noting | False |
filesizeformat
将值转换成便于用户可读的方式 。例如:1.1KB,1.1MB,1.1GB
{{ value|filesizeformat }} # 比如变量value的值为100000,显示为97.7 KB
add
给变量加参数
{{ value|add:"2" }} # value是数字4,则输出结果为6。
{{ l1|add:l2 }} # 如果l1是 [1,2,3] ,l2是 [4,5,6] ,那输出结果是 [1,2,3,4,5,6]
lower
{{ value|lower }} # 变小写,还能给布尔值变大小写呢
upper
{{ value|upper}} # 变大写
title
{{ value|title }} # 单词首字母大写
ljust
"{{ value|ljust:"10" }}" # 左对齐
rjust
"{{ value|rjust:"10" }}" # 右对齐
center
"{{ value|center:"15" }}" # 居中
length
{{ value|length }} # 返回value的长度,如 value=['a', 'b', 'c', 'd']的话,就显示4
slice
{{value|slice:"2:-1"}} # 切片
first
{{ value|first }} # 取第一个元素
last
{{ value|last }} # 去最后一个元素
join
{{ value|join:" // " }} # 使用字符串拼接列表,功能等同于python中的str.join(list)
truncatechars
如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。
参数:截断的字符数,
{{ value|truncatechars:9}} # 截断9个字符
truncatewords
将字符串转换为省略表达方式,以空格计数单词
{{ value|truncatewords:9}} # 阶段9个单词
date
{{ value|date:"Y-m-d H:i:s"}} # 日期格式化
也可以在settings中进行日期格式的定义
USE_L10N = False
DATETIME_FORMAT = 'Y-m-d H:i:s'
DATE_FORMAT = 'Y-m-d'
TIME_FORMAT = 'H:i:s'
字典拆包
{{ dic.key }}
{{ dic.keys }}
{{ dic.values }}
{{ dic.items}}
【注意】Django的模板语言中属性的优先级大于方法
例如dic = {"name":"jjzz", "items": "100"}
在模板中执行{{ dic.items }}
显示100
safe
通常情况下,django模板会对HTML标签和JS语法进行自动转义,就是将包含的html标签输出,而不被解释执行,原因是当显示用户提交字符串时,可能包含一些攻击性的代码,如js脚本。例如<
会转换为<
,但是有些时候我们不希望这些元素被HTML转义,那么这是就需要safe过滤器来告诉django这段代码是安全的,不需要转义。
{{ value|safe}}
【举例】
views中设置
link = '<a href="https://cn.bing.com">这是bing搜索</a>'
return(request,"jjzz.html",{"link":link})
HTML模板中设置
<p>{{ link }}</p>
<p>{{ link|safe }}</p>
显示
还可以在views中在向模板传递数据前使用mark_safe
来进行防转义设置
from django.utils.safestring import mark_safe
a_link= mark_safe('<a href="http://www.baidu.com">跳转</a>')
自定义Filter
自定义的过滤器知识带一个或者两个参数的python函数
定义
在app下创建一个名为templatetags的python包,确保该app已经在settings.py中INSTALLED_APPS注册了。
在包内创建py文件 — > 自定义 jjzz.py
在py文件中写入:
from django import template
register = template.Library() # register不能变定义函数 + 加装饰
from django.utils.safestring import mark_safe
@register.filter
def new_safe(value, arg=None): # arg 最多有一个
return mark_safe(value)
在模板中使用:
{% load jjzz %}
{{ '<a href="https://cn.bing.com">这是bing搜索</a>'|new_safe }}
Django模板系统-内置和自定义Filters的更多相关文章
- Django 模板系统
Django模板系统 常用语法 {{}} 变量相关 {%%} 逻辑相关 变量 格式 {{ 变量名 }} 命名规则 包括任何字母数字以及下划线 ("_")的组合 变量名称中不能有空格 ...
- django模板系统基础
模板系统基础Django模板是一个string文本,它用来分离一个文档的展现和数据 模板定义了placeholder和表示多种逻辑的tags来规定文档如何展现 通常模板用来输出HTML,但是Djang ...
- Django模板系统(非常详细)(后台数据如何展示在前台)
前面的章节我们看到如何在视图中返回HTML,但是HTML是硬编码在Python代码中的这会导致几个问题:1,显然,任何页面的改动会牵扯到Python代码的改动网站的设计改动会比Python代码改动更频 ...
- (转)Django学习之 第四章:Django模板系统
前面的章节我们看到如何在视图中返回HTML,但是HTML是硬编码在Python代码中的 这会导致几个问题: 1.显然,任何页面的改动会牵扯到Python代码的改动 网站的设计改动会比Python代码改 ...
- python MVC、MTV 框架介绍 Django 模板系统常用语法
Django 框架简介一.MVC框架和MTV框架1.MVC 全名Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分.优势: 耦合性低 重用性高 生命 ...
- Python学习(二十八)—— Django模板系统
转载自http://www.cnblogs.com/liwenzhou/p/7931828.html Django模板系统 官方文档 一.常用语法 只需要记两种特殊符号: {{ }}和 {% %} ...
- pytest封神之路第四步 内置和自定义marker
可以通过命令行查看所有marker,包括内置和自定义的 pytest --markers 内置marker 内置marker本文先讲usefixtures .filterwarnings .skip ...
- python终极篇 ---django 模板系统
模板系统 . MV ...
- Django模板系统:Template
一.模板常用语法 1.1 变量 符号:{{ }} 表示变量,在模板渲染的时候替换成值 使用方式:{{ 变量名 }}:变量名由字母数字和下划线组成 点(.)在模板语言中有特殊的含义,用来获取对象的相应属 ...
随机推荐
- 12-SSMS图形化工具中不允许保存修改的解决办法
1.报出的警告 2.解决办法 工具-->选项-->设计器--->表设计和数据库设计器-->阻止保存要求重新创建表的更改 的勾去掉就OK 了
- mysql解除锁表
查看下在锁的事务 :SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; 杀死进程id(就是上面命令的trx_mysql_thread_id列):kill 线程ID
- qt一些函数
sleep(n); 休息ns msleep(1000); 休息1000毫秒 usleep(1000000); //休息n微妙
- 04 vue-cli 脚手架、webpack-simple模板项目生成、组件使用
alice https://www.cnblogs.com/alice-bj/p/9317504.html https://www.cnblogs.com/alice-bj/p/9318069.htm ...
- AOP初步
一刀切的AOP基础 软件开发的目的,最终是为了解决各种需求,包括业务和系统的,使用OOP可以对业务需求等普通关注点进行很好的抽象和封装,并且使之模块化. 但OOP却无法解决类似于日志.安全.事务等系统 ...
- cookbook 11.1 在文本控制台中显示进度条
任务: 在进行长时间操作时,向用户显示一个"进度指示条". 解决方案: #coding=utf-8 import sys class progressbar(object): de ...
- nginx 入门实战
nginx入门实战 nginx 安装与卸载 下载安装 进入 http://nginx.org/en/download.html 下载自己想要的版本,我选择的stable版本 tar -zxvf ngi ...
- 微信小程序_(组件)可拖动movable-view
微信小程序movable-view组件官方文档 传送门 Learn 一.moveable-view组件 一.movable-view组件 direction:movable-view的移动方向,属性值 ...
- gcd表(欧几里得定理)
题目:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=797 gcd表 时间限制:1000 ms | 内存限制:65535 KB 难度:3 ...
- lamp 环境利用compser安装tp5
1.安装compser,这个可以去百度命令 2.cd到根目录 3.composer create-project --prefer-dist topthink/think tp(tp可以随意命名) 4 ...