django -- 模版语言之过滤器Filters和for循环
前戏
在前面写的图书管理系统中,我们对模版语言应该已经不陌生了,使用{{ }}包裹起来的就是模版语言,只需要记住两种就可以了
{{ 变量名 }} 变量相关的
{% %} 逻辑相关的
变量
如果使用的变量不存在,模版系统将插入string_if_invalid选项的值,它被默认设置为“”(空字符串)
看几个栗子
例子1:
def index(request):
name = '邹邹'
dic = {
"name": "老王",
"age": 18,
"items": "test"
}
return render(request, "index1.html", {"n1": name, "d1": dic})
<p>{{ n1 }}</p> <!-- 取变量的值 --> 邹邹
<p>{{ d1.age }}</p> <!-- 取字典里key对应的值 --> 18
<p>{{ d1.items }}</p> <!-- 取字典里items的值,如果字典没有items这个key,则用字典的item方法 --> test 没有则为:dict_items([('name', '老王'), ('age', 18)])
例子2:
def index(request):
lis = ["where", "what", "why"] class Person(object):
def __init__(self, name, age, dream):
self.name = name
self.age = age
self.dream = dream def dream(self):
return "少年不努力,长大搞IT" p1 = Person('邹邹', 18, 'money') return render(request, "index1.html", {"name": lis, "p": p1})
<p>{{ name.1 }}</p> <!-- 取列表里索引为1的值 --> what
<p>{{ p.age }}</p> <!-- 取类里的属性 --> 18
<p>{{ p.dream }}</p> <!-- 先取类里的属性,如果不存在执行dream方法 --> money 不存在----少年不努力,长大搞IT
总结:
点(.)在模版中有特殊的含义,当遇到点时,它将以下面的顺序查询
1.字典查询
2.属性或方法查询(先根据属性查,查询不到在查询对应的方法)
3.数字索引查询
Filters(过滤器)
在Django中,可以使用过滤器来改变变量的显示
语法:{{value|filter_name:参数}} 使用管道符“|”来表示过滤器
说明:
1.过滤器支持链式操作,既一个过滤器的输出可以作为另一个过滤器的输入
2.管道符“|”和冒号“:”左右不能有空格
3.过滤器参数包含空格的话,必须用引号包裹起来
default
说明:如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值
<p>{{ name|default:"你好" }}</p>
add
作用:如果是int型,则将参数相加,如果是字符串,则拼接
name = 123
<p>{{ name|add:"5"}}</p>
结果:
128
字符串拼接
name = "aaa"
<p>{{ name|add:"5"}}</p>
结果:
aaa5
addslashes
作用:在value中的引号前增加反斜线“\”
name = 'abc"rwer"dd'
<p>{{ name|addslashes}}</p>
结果:
abc\"rwer\"dd
capfirst
作用:将value中的第一个字符串转化成大写
name = 'abc'
<p>{{ name|capfirst}}</p>
结果:
Abc
lower
作用:将一个字符串转为小写形式
name = 'ABC'
<p>{{ name|lower}}</p>
结果:
abc
upper
作用:将一个字符串转为大写形式
name = 'abc'
<p>{{ name|upper}}</p>
结果:
ABC
length
说明:返回值的长度,作用于字符串和列表
语法:{{value|length}}
<p>{{ name|length}}</p>
如name = "abcd",则显示为4
filesizeformat
将一个数字转为一个大小
语法
{{value|filesizeformat}}
如value=123456,结果为120.6 KB。value=123456789,结果为117.7 MB
slice
作用:切片
name = '123456789'
<p>{{ name|slice:"2:6"}}</p>
结果:3456
date
作用:格式化显示时间
{{ value|date:"Y-m-d H:i:s"}}
safe
Django模版中写一段HTML代码,会默认转义,在页面上也显示的是HTML代码
例如:
name = '<p>我是vip</p>'
<p>{{ name}}</p>
结果:
<p>我是vip</p>
但是我们只想让它显示:我是vip,这时候就要用safe了
<p>{{ name|safe}}</p>
truncatechars
如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。...也算三个字符串
参数:截断的字符数
name = 'abcdefghijklmn'
<p>{{ name|truncatechars:7}}</p>
结果:
abcd...
cut
作用:删除指定的字符串
name = 'abcdefghajklma'
<p>{{ name|cut:'a'}}</p>
结果:把字符串a都删掉了
bcdefghjklm
join
字符串连接,和python中的join一样
lis = ['邹邹', '马云', '麻花藤']
<p>{{ name|join:"-"}}</p>
结果:
邹邹-马云-麻花藤
自定义filter
虽然Django给我们提供了很多的过滤器方法,但往往还是不能满足我们的项目开发,这时候我们就需要自定义filter了,自定义filter函数就是python中的函数
在app中先创建一个templatetags的包,必须是这个名,然后再包下建一个py文件,名称随便起

在add_str.py里就可以写自定义的filter函数了
from django import template register = template.Library() # 固定写法,生成一个注册实例对象 @register.filter() # 告诉Django的模版语言我现在注册一个自定义的filter
def add_hello(value):
'''
:param value: | 左边被修饰的那个变量
:return:
'''
return value + "hello" @register.filter()
def add_str(value, arg):
# value 左边被修饰的变量
return value + arg
说明:@register.filter()里也可以写name=“xxx”,@register.filter(name="hello"),如果这样写了之后,在HTML文件里就不能使用函数名来当过滤器了,要使用你定义的这个名称
在html里引用和之前的过滤器用法一样,唯一不同的是要在引用之前写{% load 文件名 %}
name = 'abc'
{% load add_str %}
<p>{{ name|add_hello}}</p>
<p>{{ name|add_str:"good"}}</p>
结果:
abchello abcgood
注意:如果报错,要重启django项目,因为templatetags是我们新建的包
for
语法:
{% for i in data %}
<td>{{ i.name }}</td>
{% endfor %}
常用的for循环
|
forloop.counter |
当前索引的索引值,从1开始 |
| forloop.counter0 | 当前索引的索引值,从0开始 |
| forloop.revcounter | 当前循环的倒序索引值(到1结束) |
| forloop.revcounter0 | 当前循环的倒序索引值(到0结束) |
| forloop.first | 当前循环是不是第一次循环(布尔值) |
| forloop.last | 当前循环是不是最后一次循环(布尔值) |
| forloop.parentloop | 本层循环的外层循环 |
for...empty
{% for i in data %}
<td>{{ i.name }}</td>
{% empty %}
<td>空空如也</td>
{% endfor %}
if...elif...else
{% if user_list %}
{{ user_list|length }}
{% elif black_list %}
{{ black_list|length }
{% else %}
没有用户
{% endif %}
if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断
with
{% with business.employees.count as f %}
{{ f.name }}
{% endwith %}
相当与给 with business.employees.count 起了个别名f
django -- 模版语言之过滤器Filters和for循环的更多相关文章
- Django模版语言 格式化显示 后台datatime()时间
Django模版语言 格式化显示 后台datatime()时间 场景描述:
- Django模版语言的复用 1. include标签--模版导入 2.inclusion_tag自定义标签--模版导入 3.母版
include标签--模版导入 ''' 前提:项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的 如何运用:可以将多个样式标签的集合进行封装,对外提供版块的名字( ...
- Django模板语言,过滤器整理
Django模板语言,过滤器整理 1. add {{ value|add:"2" }} 把add后的参数加给value: 处理时,过滤器首先会强制把两个值转换成Int类型. 如果强 ...
- Django 模版语言详解
一.简介 模版是纯文本文件.它可以产生任何基于文本的的格式(HTML,XML,CSV等等). 模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签. 例: {% extends "b ...
- Django 模版语言
传入变量 {{ 变量名 }} 在 view.py 的函数返回 render 时在html文件名后传入一个字典,字典的 key 对应html文件中的变量名,value 为传入的值 views.py: d ...
- Django模版语言自定义标签-实现前端 关联组合过滤查询
前端关联 组合过滤查询 实现效果如图: models.py 创建表代码 from django.db import models # Create your models here. class Le ...
- Django模版语言inclusion_tag的用法。
inclusion_tag.它多用于一个HTML片段的.例如我写的一个BBS项目中. 一个博主的主页面的左侧栏和查看博主某篇文章的页面的左栅栏的一样的.为了不用重复写同样的代码.且提高页面的扩 ...
- Django模版中的过滤器详细解析 Django filter大全
就象本章前面提到的一样,模板过滤器是在变量被显示前修改它的值的一个简单方法. 过滤器看起来是这样的: {{ name|lower }} 显示的内容是变量 {{ name }} 被过滤器 lower 处 ...
- Django - 模版语言循环字典
1.可以对传入字典参数做循环显示 views.py中代码: urls.py中代码: html中代码: 在模版语言中,可以对字典进行类似python中的操作(keys,values,items),需要注 ...
随机推荐
- 明解C语言 入门篇 第十章答案
练习10-1 #include <stdio.h> void adjust_point(int*n) { ) *n = ; ) *n = 0; } int main() { int x; ...
- [转帖]linux lsof 用法简介
linux lsof 用法简介 https://www.cnblogs.com/saneri/p/5333333.html 1.简介: lsof(list open files)是一个列出当前系统打开 ...
- 执行"rm -rf /"之后世界安静了吗
对于Unix/Linux程序员来说,"rm -rf /"一直被认为是一个极度危险的操作,因为直接把根目录给删除了,整个操作系统也就崩溃了.但实际上会是这样的吗?呵呵,请看图: 啊哈 ...
- cmd命令和linux命令的区别
cmd命令和linux命令看起来很相似,都是在一个控制台输入一些特定的指令去完成一些特定的操作.可是用过的朋友就会发现这些指令是有很多不同的,可是到底有什么不同,要说又说不上来,所以要了解一下. cm ...
- Java 8——接口中个的默认方法和静态方法
在Java SE 8之前,interface只是事物的抽象,用来定义统一的抽象事物和描述事物的抽象行为和属性. 但是在Java SE 8中,增加了可以在interface中增加默认实现的行为和事物的静 ...
- Go语言-1-标识符与变量
目录 1. Go标识符 1.1 Go关键字 1.2 常量标识符(4个) 1.3 空白标识符(1个) 1.4 内置数据类型标识符 1.5 内置函数(15个) 2. Go语言操作符 3. Go语言变量 3 ...
- hadoop格式化:java.io.IOException: Incompatible clusterIDs in /home/lxh/hadoop/hdfs/data: namenode clusterID
1 概述 解决hadoop启动hdfs时,datanode无法启动的问题.错误为: java.io.IOException: Incompatible clusterIDs in /home/lxh ...
- .NetCore使用NLog写入数据库总结
考虑到项目后期添加日志的需求,抽个闲暇时间学习一下使用NLog插件将日志信息写入到数据库中,完整项目见下面: 遇到的问题: 使用NLog写到SQLServer里面的中文显示问号? 解决方法:调整数据库 ...
- Python - 基本数据类型 - 第二天
Python3 基本数据类型 Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型& ...
- Python学习笔记之测试函数
11-1 城市和国家:编写一个函数,它接受两个形参:一个城市名和一个国家名.这个函数返回一个格式为City, Country 的字符串,如Santiago, Chile.将这个函数存储在一个名为cit ...