zoukankan      html  css  js  c++  java
  • django过滤器filter和simple_tag

    django的filter分为自带的和自定义的两种:
    
    下面是第一种django自带的filter
    

      

    views.py

    
    def index(request):
        print("index,....")
        navs = '今天天气很好今天是周一啊'
        title1 = 'today'
        title2 = 'TODAY'
        tmp_html = '<h1>h1test</h1>'
        articles = models.Article.objects.all()
        return render(request,'index.html',{'articles':articles,'navs':navs,'title1':title1,'title2':title2,'tmp_html':tmp_html})
    
    
    index.html
    {# django自带过滤器filter,可以对服务端返回的数据进一步加工#} {{navs}}<br> {# 获取长度#} {# length是django自带的过滤器,在使用{{navs|length}}实际是将navs传递给length,由length返回当前变量长度#} {{navs|length}}<br> {# 获取第一个元素#} {{navs.0}}<br> {# 包括...在内超过6个字符就省略后面的#} {# 数字6代表页面要显示几个字符,其中还包括3个点#} {# truncatechars是个方法,navs 当作第一个参数传递给truncatechars,6当作第二个方法传递给truncatechars #} {# 注:filter最多只能接受2个参数#} {{navs|truncatechars:6}}<br> {# 切片#} {{navs|slice:"0:8"}}<br> {# 拼接,如果是字符串则每个字符串中间用=号相连#} {{navs|join:"="}}<br> {# 如果后台没有返回则显示默认参数#} {{navs|default:"管理员"}}<br> {# 小写#} {{title2|lower}}<br> {# 大写#} {{title1|upper}}<br> {# 如果返回的数据是标签格式,用safe则能把标签里面的内容渲染到前端页面上,如果不用safe,则返回的是views里原封不动定义的内容}#} {{tmp_html|safe}}

      页面效果:

    除了django自带的filter,还有定义的filter,下面是自定义filter:

    注册步骤:

    自定义filter注册步骤:
    1.在app的根目录创建templatetags目录
    2.在templatetags目录创建xxx.py文件
    3.固定导入
    from django import template
    register = template.Library() #register变量必须这么定义
    4.使用装饰器@register.filter修饰自定义的filter方法
    5.例如:
    @register.filter
    def filter_demo(x,y):
            return x+y
    6.在html中导入{% load demoTags %}
    7.使用
    {{ 1|filter_demo:2}}  -----自定义filter
    8.filter最多只支持2个参数,管道符左侧为第一个参数,管道符右侧为第二个参数
    注册完如果pycharm没识别,没起作用,可以重启pycharm,重启后会ok

    整个目录结构:

    demoTags.py
    from django import template
    register = template.Library()
    
    
    # 如果不加@register.filter,下面这个函数就是一个单独的方法,如果加上了装饰器@register.filter,就变成了一个自定义过滤器
    @register.filter
    def status_filter(x):  #方法名随便定义
        if x==1:
            return '成功'
        else:
            return '失败'
    
    # 装饰器不要带括号
    @register.filter
    def test_filter(x,y):
        return x+y
    

    views.py

    def index(request):
        print("index,....")
        navs = '今天天气很好今天是周一啊'
        title1 = 'today'
        title2 = 'TODAY'
        tmp_html = '<h1>h1test</h1>'
        articles = models.Article.objects.all()
        status=1
        return render(request,'index.html',{'articles':articles,'navs':navs,'title1':title1,'title2':title2,'tmp_html':tmp_html,'status':status})
    

     

    index.html

    {% extends 'base.html' %}
    {% load demoTags %}
    {% block css %}
        <link href="https://cdn.bootcss.com/twitter-bootstrap/4.3.1/css/index1111.min.css" rel="stylesheet">
    {% endblock %}
    {% block content %}
    
    {#   如果当前页面要引用的话,最好放在{% block content %}里面,放在{% extends 'base.html' %}下面也ok,但是不能放在{% extends 'base.html' %}上面#}
    
        <div class="col-lg-8">
           ---自定义filter---<br>
            {{1|status_filter}}<br>
            {{navs|status_filter}}<br>
            {{status|status_filter}}
            {{status|test_filter:2}} 这个是filter有两个参数的实例,因为views.py里面的index方法里面已经传递了一个status,所以引用的时候在变量后面只添加了一个参数2,加起来一共是两个参数
    

    filter最多只能传两个参数,当参数有多个的时候,可以考虑自定义tag

    自定义simple tag注册步骤:
    1.在app的根目录创建templatetags目录
    2.在templatetags目录创建xxx.py文件
    3.固定导入
    from django import template
    register = template.Library() #register变量必须这么定义
    4.使用装饰器@register.simple_tag修饰自定义的simple_tag方法
    5.例如:
    @register.simple_tag
    @register.simple_tag
    def test_simple_tag(x,y,z):
        return x+y+z
    6.在html中导入{% load demoTags %}
    7.使用
    {% test_simple_tag 1 1 1 %} ---自定义simple_tag
    8.simple_tag可以支持多个参数,通过空格进行分割即可
    注册完如果pycharm没识别,没起作用,可以重启pycharm,重启后会ok

    demoTags.py

    from django import template
    register = template.Library()
    
    
    # 如果不加@register.filter,下面这个函数就是一个单独的方法,如果加上了装饰器@register.filter,就变成了一个自定义过滤器
    @register.filter
    def status_filter(x):  #方法名随便定义
        if x==1:
            return '成功'
        else:
            return '失败'
    
    # 装饰器不要带括号
    @register.filter
    def test_filter(x,y):
        return x+y
    
    
    # 装饰器不要带括号
    @register.simple_tag
    def test_simple_tag(x,y,z):
        return x+y+z
    

    index.html

    {% extends 'base.html' %}
    {% load demoTags %}
    {% block css %}
        <link href="https://cdn.bootcss.com/twitter-bootstrap/4.3.1/css/index1111.min.css" rel="stylesheet">
    {% endblock %}
    {% block content %}
    
    {#   如果当前页面要引用的话,最好放在{% block content %}里面,放在{% extends 'base.html' %}下面也ok,但是不能放在{% extends 'base.html' %}上面#}
    
        <div class="col-lg-8">
    {#       ---自定义filter---<br>#}
    {#        {{1|status_filter}}<br>#}
    {#        {{navs|status_filter}}<br>#}
    {#        {{status|status_filter}}#}
    {#        {{status|test_filter:2}}#}
    {#    django自带过滤器filter,可以对服务端返回的数据进一步加工#}
    {#    {{navs}}<br>#}
    {#    获取长度#}
    {#    length是django自带的过滤器,在使用{{navs|length}}实际是将navs传递给length,由length返回当前变量长度#}
    {#    {{navs|length}}<br>#}
    {#    获取第一个元素#}
    {#    {{navs.0}}<br>#}
    {#    包括...在内超过6个字符就省略后面的#}
    {#    数字6代表页面要显示几个字符,其中还包括3个点#}
    {#  truncatechars是个方法,navs 当作第一个参数传递给truncatechars,6当作第二个方法传递给truncatechars #}
    {#    注:filter最多只能接受2个参数#}
    {#    {{navs|truncatechars:6}}<br>#}
    {#    切片#}
    {#    {{navs|slice:"0:8"}}<br>#}
    {#    拼接,如果是字符串则每个字符串中间用=号相连#}
    {#    {{navs|join:"="}}<br>#}
    {#    如果后台没有返回则显示默认参数#}
    {#    {{navs|default:"管理员"}}<br>#}
    {#    小写#}
    {#    {{title2|lower}}<br>#}
    {#    大写#}
    {#    {{title1|upper}}<br>#}
    {#   如果返回的数据是标签格式,用safe则能把标签里面的内容渲染到前端页面上,如果不用safe,则返回的是views里原封不动定义的内容}#}
    {#    {{tmp_html|safe}}#}
    
    
    {#自定义tag可以接收多个参数#}
    
                    <h1>simple_tag_test</h1>
                    {% test_simple_tag 1 1 1 %}
    

    自定义simple tag自定义filter的方法大同小异,前面几个步骤是一样的

  • 相关阅读:
    细说java中的类
    使用LayUI操作数据表格
    使用LayUI展示数据
    一步一步做搜索(一)
    试图加载格式不正确的程序
    自己实现spring核心功能 三
    SpringMvc请求处理流程与源码探秘
    设计模式之代理模式
    爬虫功能介绍
    爬虫监控帮助文档汇总
  • 原文地址:https://www.cnblogs.com/liulilitoday/p/13626009.html
Copyright © 2011-2022 走看看