Django的变量过滤Filters、常用方法案例

本文深入探讨Django模板语言中的过滤器使用方法,包括预设过滤器如default、length、filesizeformat等的功能与示例,以及如何自定义过滤器和simple_tag,实现更复杂的数据处理需求。

Filters 变量加工

{#格式 值|函数#}
'|'左右没有空格没有空格没有空格


常用

当前循环.作用
default数据为空时设置默认值
length取变量长度
filesizeformat文件大小转成可读
slice从指定位置到指定位切片
datedatetime取到的时间,转成指定格式
safe防止XSS攻击、加上safe才能传标签
truncatechars取摘显示一段剩下的…

例子

{#格式   值|函数#}
{#    如果没有值,那么使用默认值#}
    <p>{{ bucunzai|default:'空的哦' }}</p>

{#    取出变量长度#}
    <q>{{ name }}--{{ name|length }}</q>

{#      文件大小转换成可读型  kb 自动转成bm、g、tb#}
    <p>文件大小{{ file_size|filesizeformat }}</p>

{#    切片 从指定位置到指定位 ,例:第3位到-2位#}
    <p>切片:{{ slice_str|slice:'3:-2' }}</p>

{#    把datetime取到的时间,转成指定格式#}
    <p>格式化:{{ now|date:'Y-m-d H:i:s' }}</p>

{#    如果后端内容包含标签,那么加上safe 才能转义(防止用户直接加script标签作弊)防XSS攻击#}
    <p>{{ h_html|safe }}</p>

{#    取摘要只显示一段,指定取长度后面...例:120个字符 #}
    <p>长文本:{{ p_str|truncatechars:12 }}</p>

filter自定义加工

缺点只能带一个参数

  1. 在app内创建固定名:templatetags文件夹
  2. 在其中创建myfilter.py来装自定义
  3. 导入模块、实例化对象
  4. 写自定义功能
  5. html中导入路径
  6. 使用自定义方法,带参数则要用:号
'''
 1. 在app内创建固定名:templatetags文件夹
 2. 在其中创建myfilter.py来装自定义
'''
# 一定要导入
from django import template
register = template.Library()

# 字符串加一个sb
@register.filter(name="addSB")  # 告诉模版这里有个自定义方法 名字叫:addSB
def add_sb(value):
    return "{} SB".format(value)

# 有参数
@register.filter(name="addstr") # 注册到模版语言
def cut(value, arg):
    return '{}{}'.format(value,arg)

HTML中

{#    一定要导入才能使用#}
    {% load myfilter %}
    <p>自定义:{{ name|addSB}}</p>
{#    参数用:参数传#}
    <p>自定义带参数:{{ name|addstr:'技术好'}}</p>

这里写图片描述
这里写图片描述


simpletag自定义价格(可多参数

# 一定要导入(与filter一样)
from django import template
register = template.Library()

@register.simple_tag(name="plus")  # 注册到模版语言.simple_tag
def plus(a, b, c):
    return "{} + {} + {}".format(a, b, c)

html中使用

{% load mysimpletag %}  <!--导入文件夹路径-->

{# simple tag #}
{% plus "1" "2" "abc" %}   <!--格式不同-->

inclusion_tag返回html代码片段

templatetags/my_inclusion.py

from django import template
register = template.Library()

<!--将下面得到的data值,当参数传给result.html处理,然后返回html代码传给调用者-->
@register.inclusion_tag('result.html') 
def show_results(n):
    n = 1 if n < 1 else int(n)
    data = ["第{}项".format(i) for i in range(1, n+1)]
    return {"data": data}<!--该值传给注册的result.html处理-->

templates/snippets/result.html

<!--接收到data 后进行处理数据,得到li表-->
<ul>
  {% for choice in data %}
    <li>{{ choice }}</li>
  {% endfor %}
</ul>

templates/index.html

<body>

{% load inclusion_tag_test %}
<!--这里直接传参数10,自动运行结果并返回  一段html-->
{% show_results 10 %}
</body>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值