• (13)自定意义标签和过滤器 (templatetags)


    过滤器分内置和自定意义

    PS:过滤器可以用在for循环和if判断后,但是标签不能使用在for循环和if判断后

    内置过滤器:

    add(在模板中实现加减法)

    default(就是当传入的变量是False的时候显示后面设定的字符,如果是True的时候就是显示True)

    length(计算变量的长度)

    filesizeformat*(将变量的值根据长度自动进行一个单位换算,不同长度显示不同的单位,kbmb b)

    date(将python中的时间对象变成自己设定的类型在页面中显示,date后面格式一定是一个字符串形式)、safe(就是将视图中的变量值原封不动的在页面中显示)

    PS:过滤器的使用{{ 字符或者数字 |add:字符或者数字 }}

    内置标签

    for 循环、if 判断

    自定义过滤器:步骤必须严格按照格式,最多只能传2个参数

    1、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.   #其实就是新建app的时候要在settings中配置

    2、在app中创建templatetags模块(模块名只能是templatetags)   #在app下要创建一个包 名字为templatetags这个名字不能错误

    3、创建任意 .py 文件,如:my_tags.py   #名字随意命名,这个py文件内就是写自定意义过滤器的代码

    4、在自定义过滤器的py文件内把django.template中的Library 导入

    5、在自定义过滤器的py文件内定义一个变量是register = Library()

    6、定义过滤器:在自己写的过滤器代码,即函数顶部加上@register.filter(is_safe=False)

    7、使用自定义过滤器:

    在模板中要用load导入自定义过滤器   {% load 自定义过滤器文件名%}   #自定义过滤器

    {{ 参数值 |自定义过滤器函数名 : 参数值 }}   #前后的参数不限于字符或数字,根据需求写的过滤器的功能不同

    PS:写好过滤器项目要重启 下,否则可能无法导入

    PS:给过滤器重命名,可以在@register.filter(name='addrses')   #这里括号里的name就是给过滤器重命名,以后调用时候直接用这个重命名的名字即可

    自定义标签:在模板中使用,传入的参数不限

    1、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.   #其实就是新建app的时候要在settings中配置

    2、在app中创建templatetags模块(模块名只能是templatetags)   #在app下要创建一个包 名字为templatetags,这个名字不能错误

    3、创建任意 .py 文件,如:my_tags.py   #名字随意命名,这个py文件内就是写自定意义标签的代码

    4、在自定义过滤器的py文件内把django.template中的Library 导入

    5、在自定义过滤器的py文件内定义一个变量是register = Library()

    6、定义过滤器:在自己写的过滤器代码,即函数顶部加上@register.simple_tag()

    7、使用自定义标签:

    在模板中用load导入自定义标签 {% load 自定义标签名%} 

    {%  自定义标签名 空格 参数1 空格 参数2 %}   #格式就是标签名后面+空格——传入的参数,有多少参数就要写多少参数

    自定义过滤器和标签实例:

    my_filter.py  #app01 emplatetags  下

    # 这里写的就是自定义过滤器的代码
    from django.template import Library

    register = Library()

    @register.filter(is_safe=False)
    def my_filters(a,b):
    return a + b

    views.py  #这里一定要传参,否则报错

    from django.shortcuts import render,HttpResponse

    # Create your views here.

    def index(request):
    li = [1,2,3]
    return render(request,'index.html',{'li':li})

    urls.py

    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'index/', views.index)
    ]

    index.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <h1>我是首页</h1>
    {{ li }}

    <p>使用自定义过滤器</p>
    {% load my_filter %}
    {{ 1| my_filters:4 }}

    <p>使用自定义标签</p>
    {% load my_label %}
    {% my_labels 1 2 3 %}
    </body>
    </html>

    过滤器用在if判断内

    views.py   #app下的

    from django.shortcuts import render,HttpResponse

    # Create your views here.

    def index(request):
    li = 1
    return render(request,'index.html',{'li':li})

    my_filter.py  #app01 emplatetags下的

    # 这里写的就是自定义过滤器的代码
    from django.template import Library

    register = Library()

    @register.filter(is_safe=False)
    def my_filters(a,b):
    return a + b

    index.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <h1>我是首页</h1>
    {{ li }}
    {#自定义过滤器用在if判断后 #}
    {% load my_filter %}
    {% if 1|my_filters:20 < 10 %}
    <p>小于10</p>
    {% else %}
    <p>大于10</p>
    {% endif %}

    </body>
    </html>

    urls.py

    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'index/', views.index)
    ]
  • 相关阅读:
    用JAVA发送一个XML格式的HTTP请求
    LR 测试http协议xml格式数据接口
    软件测试术语
    linux学习笔记
    接口测试文章整理
    InputStream只能读取一次的解决办法 C# byte[] 和Stream转换
    zTree更新自定义标签>>>
    C# 各类常见Exception 异常信息
    C# 调用存储过程 Sql Server存储过程 存储过程报错,程序中的try
    SQL Server 2014 清除用户名和密码
  • 原文地址:https://www.cnblogs.com/shizhengquan/p/10511588.html
Copyright © 2020-2023  润新知