django -过滤器的使用

摘要:
如果“key”值不存在,将使用“default”筛选器提供的默认值。如果要使用类似于“python”的值来判断某个值是否为false,则必须传递另一个参数“{{value | default}}”{“nlll”| default:“noneddd”}}#如果nlll之后的值为false,它将写入该值

前情提要:

  最近工作中用到django 中的 

    自定制过滤器的内容,

再此 复习一波过滤器和自定制 过滤器的内容

自定制过滤器

 

1、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.

2、在app中创建templatetags模块(模块名只能是templatetags)

3、创建任意 .py 文件,如:my_tags.py

django -过滤器的使用第1张

 django 自定制过滤器代码

django -过滤器的使用第2张

from django import template
from django.utils.safestring import mark_safe

register = template.Library()  # register的名字是固定的,不可改变


@register.filter
def filter_multi(v1):

    msg= v1.pop()
    return msg


@register.simple_tag
def simple_tag_multi(v1, v2):
    return v1 * v2




@register.simple_tag
def my_input(id,):
    result = "<input type='text'   />" % (id)
    return mark_safe(result)

前段代码

num 对应后端传过来的数据内容

django -过滤器的使用第3张

视图代码

django -过滤器的使用第4张

 致此  自定制列内容 的所有内容都完成了

现在描述一下 系统自带的过滤器内容

Django过滤器

add过滤器:将字符串和字母、整数链接(若为字符串会转化为整数形式)
注:若是一个字母字符串和一个数字进行链接会输出空
    {{ 1|add:2 }}返回一个3
    {{ "2"|add:3 }}返回一个5
    {{ "a"|add:3 }}#返回一个空

cut过滤器 移除指定的字符串注:后面的参数必须是字符串的形式
    {{ "hello world"|cut:" " }}#移除了hello world 里的所有空格 结果为 helloworld
    {{ "hello world"|cut:"e" }}#结果为hllo world 移除了e
    {{ 123456|cut:1 }}#会报错 是因为参数不是字符串的形式 不管前面所要移除的对象是否为整数 参数必须是字符串的形式

data过滤器--过滤时间的过滤器(要用到datetime模块)
    {{ time|date:"Y-m-g" }}#后面的参数必须要加引号 会显示出时间年月时分

first过滤器和last过滤器--输出列表/元组/字符串中的第一个 /最后一个值(不能传参数)
且元祖列表都要提前定义(只输入变量名)
#name:["ll","ww","ee"]
    {{ name|first }}#输出li
    {{ name|last }}#输出ee
    {{ "15784"|first }}#字符串 输出1

floatformat过滤器--将浮点数保留小数 不传如参数就是默认保留一位(只看小数点后两位)
且正数和负数方式一样
    {{ 1.41|floatformat }}#输出1.4
    {{ 1.545|floatformat }}#输出1.5(只看小数点后两位等同于1.54)
    {{ -1.05|floatformat }}#输出-1.1
    {{ 1.247|floatformat:2 }}#输出1.25
join过滤器 在中间加一些特殊符号 类似于python的join(可以在列表,元祖操作)
    {{ "hello"|join:"*" }}#输出h*e*l*l*o
    {{ name|join:"-" }}

length过滤器 获取字符串、元祖、列表的长度(没有参数)
    {{ "1515"|length }}#输出4

upper/lower过滤器 将字母改成大/小写(没有参数)
    {{ "woaini"|upper }}#输出WOAINI
    {{ "DEFRT"|lower }}#输出defrt

random过滤器 随机抽取列表、元祖、字符串中的随机一个数,类似于python中的random模块
    {{ name|random }}#随机在这个里面输出一个值

safe过滤器 关闭字符串自动转义 就是传入的值里面没有任何特殊字符就会原样输出 若有就会转义输出(列入<br>),且python中的特殊字符无法识别
#"style": "abcdef<br>adasds"
    {{ style|safe }}#会输出abcdef
                            adasds
#"style": "woaini"
    {{ style|safe }}#会输出woaini(原样输出)

slice过滤器 类似于python的slice 切片(对字符串、元祖、列表操作)
    {{ "woaini"|slice:"2" }}#输出wo(默认是从第0位开始到第2位结束,且不包含第二位)
    {{ "woshini"|slice:"2:5" }}#输出shi

striptags过滤器 删除字符串中的html标签(前面的参数){{ value|striptags }} 中的value中的html标签(没有参数)
    {{ style|striptags }}#输出一个不带有html标签的(style里有h1标签就会删除原样输出)

truncatechars过滤器 如果给定的字符串长度超过了过滤器指定的长度。那么就会进行切割,并且会拼接三个点来作为省略号
    {{ "woaini"|truncatechars:5 }}#输出wo...本应输出woain但要用三个省略号作为末尾,所以就要输出wo...
    {{ "woaini"|truncatechars:6 }}#输出woaini 字符串长度和过滤器指定长度相同 原样输出
注意:若value中带有html标签 不会自动转义 会自主输出
#"style": "<h1>abcdefadasds</h1>"
    {{ style|truncatechars:6 }}#输出<h1..

truncatechars_html过滤器 和truncatechars过滤器类似只是不会切割html标签(输出的结果类似)
#"style": "<h1>abcdefadasds</h1>"

    {{ style|truncatechars_html:5}}#输出<h1>ab...</h1>

default过滤器: 使用方式'{{ value | default('默认值')}}'。如果Value 这个‘key’不存在,那么就会使用‘default’过滤器提供的默认值。
               如果你想使用类似于‘python’中判断某个值是否为false(例如:none,空字符串、空列表、空字典),
               那么就必须传递另外一个参数‘{{value | default ('默认值',boolean = True)}}’

    {{ "nlll"|default:"noneddd" }}#输出nlll 后面的值是False 就会输出value上写的值
default_if_none过滤器 只有值是none是才会用default_if_none提供的默认值 和default的关系是default包含defaul_if_none过滤器
{{ "nonon"|default_if_none:"1" }}#输出的值为nonon

免责声明:文章转载自《django -过滤器的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇画删除线的方法,如何找替代方法,Deprecated注释使用jenkins的SSH Publishers远程执行下篇

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

相关文章

【python】threadpool的内存占用问题

先说结论: 在使用多线程时,不要使用threadpool,应该使用threading, 尤其是数据量大的情况。因为threadpool会导致严重的内存占用问题! 对比threading和threadpool的内存占用 # coding=utf-8 import time import os import psutil import json...

Python中使用正则表达式获取两个字符中间部分

问题背景:当我们爬取网页信息时,对于一些标签的提取是没有意义的,所以需要提取标签中间的信息。 解决办法:用到了re包下的函数 方法1:用到了research()方法和group()方法 方法2:用到了findall()方法 具体实现: import re # 匹配两个字符中间的所有字符 a = '<p>life is short, i use...

django(八)之数据库表的一对多,多对多表-增删改查

单表操作 表记录的添加 方式一: Book() b=Book(name="python基础",price=99,author="yuan",pub_date="2017-12-12") b.save()...

HBase 学习(一) Python操作Hbase

一,前言 二,包安装 三,表操作DDL 四,数据操作DML 正文 一,前言   上节讲到我们可以用JavaAPI进行Hbase的操作,但是很明显,Java的API很底层,用起来会很不方便,如果你们学习过Python,可以用Python来对Hbase进行操作。   happybase使用:https://happybase.readthedocs.io/e...

初中信息技术(Python) 源代码

本博客原文地址:https://www.cnblogs.com/BobHuang/p/15531908.html,原文体验更佳 编程集中出现在八年级上册,为高中信息技术必修的前置内容。大多数题目都可以使用在线评测平台测试练习,详见 初中信息技术(Python)TZOJ题单 第一单元 Python程序设计基础 第1课 初识Python P4 输出语句 pri...

6个最佳的开源Python应用服务器

6个最佳的开源Python应用服务器 首先,你知道什么是应用服务器吗?应用服务器通常被描述为是存在于服务器中心架构中间层的一个软件框架。 AD: 首先,你知道什么是应用服务器吗?应用服务器通常被描述为是存在于服务器中心架构中间层的一个软件框架。 应用服务器常被看作是一个三层的应用程序,即图形用户界面(GUI)服务器,应用程序(业务逻辑)服务器,以及数据...