django -- 模版语言之过滤器Filters和for循环

摘要:
--获取字典中键对应的值-->18<p>{{d1.items}}>测试的项方法。如果没有项目,则为:dict_Items示例2:defindex:lis=[“where”,“what”,“why”]classPerson:def__init__:Self。name=名称本身。age=年龄本身。dream=dreamdefdream:return“青少年不努力工作,但长大后会做IT”p1=Personreturnrender{{name.1}}}

前戏

在前面写的图书管理系统中,我们对模版语言应该已经不陌生了,使用{{ }}包裹起来的就是模版语言,只需要记住两种就可以了

{{ 变量名 }}            变量相关的

{% %}                 逻辑相关的 

变量

如果使用的变量不存在,模版系统将插入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文件,名称随便起

django -- 模版语言之过滤器Filters和for循环第1张

 在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循环》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇google搜索技巧《史记》——五帝本纪第一,黄帝部分下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

erlang 入门(1)

erl- 命令以.结尾- %为注释- 变量必须大写开头 X = 12.- [1,3.4,true] is a list and {person, 25, "Jason"} is a tuple. - tuple赋值orpattern match{ip, IP} = {ip, "192.168.0.1"}.{Atom, IP} = {ip, "192.168...

java 基本理论知识点

http://www.cnblogs.com/hellokitty1/p/4491808.html 1、main方法是怎么写的        public static void main(String [] args){}//最习惯的      public static void main(String  args[]){}      static p...

C/C++指针内存分配小细节

char *pc = NULL; pc = new char[0]; pc[0] = '1'; 相信初学者看见上面这段代码,都会觉得奇怪,new char[n]中的n指定给指针变量分配多少内存空间,而n=0时代表什么呢? 其实上面的程序编译、运行都是正确的。因为编译器识别到指定大小为0时,会自动为其分配1BYTE的内存空间。 尝试过的小伙伴会发现,给p[1...

读懂IL代码(一)

以前刚开始学C#的时候,总有高手跟我说,去了解一下IL代码吧,看懂了你能更加清楚的知道你写出来的代码是如何运行互相调用的,可是那时候没去看,后来补的,其实感觉也不晚。刚开始看IL代码的时候,感觉非常吃力,一大堆不懂,后来,慢慢看,最后也能看得懂一丁点啦。 闲话不多说了,下面就开始讲讲IL代码 1、什么是IL代码 IL,也称为CIL,MSIL,是.NET框架...

提高程序运行效率的10个简单方法(转)

对于每一个程序员来说,程序的运行效率都是一个值得重视,并为之付出努力的问题。但是程序性能的优化也是一门复杂的学问,需要很多的知识,然而并不是每个程序员都具备这样的知识,而且论述如何优化程序提高程序运行效率的书籍也很少。但是这并不等于我们可以忽略程序的运行效率,下面就介绍一下本人积累的一些简单实用的提高程序运行效率的方法,希望对大家有所帮助。 注:以C/C+...

Jmeter(十)

-------------------------------------------------------------------转载自:北京-宏哥 https://www.cnblogs.com/du-hong/p/13091074.html ------------------------------------------------------...