• Django模板(filter过滤器{{ }}与tag标签{% %}应用)


     模板里面过滤器与标签的应用

     templates模板里面的应用参考(主要应用在这里面)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>自定义过滤器、标签验证</title>
    </head>
    <body>
        <h1>自定义双大括号过滤器(让两个字符相加)</h1>
        <!--指定加载我自定义py文件的名字-->
        {% load my_filter %}
        {{ 'yzz'|tt:'good'}}
    
    
        <hr>
        <h2>自定义标签(求和)</h2>
        {% load my_filter %}
        {% yy 12 13 14 15 %}
    
    {#    过滤器的应用#}
        <hr>
        <p>字符串名字:{{ name }}</p>
        <p>数字年龄:{{ age }}</p>
        <p>列表名字:{{ name_list }}</p>
        <p>查找列表中的第一个名字:{{ name_list.0 }}</p>
        <p>时间:{{ now }}</p>
        <p>时间:{{ now|date}}</p>
        <!--下面这种注释方法,在后台也看不到-->
    {#    <!--在views视图里面没有处理好,也可以在模板里面做过滤处理,date是个方法名-->#}
        <p>时间:{{ now|date:'Y-m-d:H:i:s'}}</p>
    {#    default空列表给其默认值#}
    {#    <p>default:{{ empty_list }}</p>#}
        <p>default:{{ empty_list|default:'给空列表传值' }}</p>
        <p>default:{{ empty_dic|default:'给空字典传值' }}</p>
    {#    计算长度#}
    
        <p>列表长度:{{ name_list|length }}</p>  #3
        <p>字典长度:{{ name_dic|length }}</p>
    {#filesizefromat将数字计算的计算转个响应的大小例如bytes kb mb等#}
        <p>计算文件大小:{{ file|filesizeformat }}</p>
    
    {#slice切片操作,顾头不顾尾#}
        <p>slice切片:{{ name|slice:'1:3' }}</p> #结果为li
    
    {#如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾#}
         <p>字符的截断...:{{ str_str|truncatechars:6 }}</p> #结果为lib...(6:字符+...共6位)
         <p>单词的截断(以空格截断)...:{{ str_str2|truncatewords:3 }}</p> # 这里的数字就是单单显示几个单词 libai love lisi ...
    
    {#    safe控制是否转义和不转义(就是跨站脚本攻击)#}
        <p>默认是a对字符串"<a href="https://www.baidu.com">点击</a>":{{ ss3 }}</p>
        <p>safe不让其转译,会正常在页面显示a的链接:{{ ss3|safe }}</p>
    
    {#add做加号#}
        <p>add做加号:{{add_num|add:'3' }}</p>
        <p>add做加号2:{{add_num|add:3 }}</p>
    {#    <p>add做加号2:{{add_num|add:'aaa' }}</p>如果是数字和字符就会输出空#}
    
    
    
        {#  标签的应用  #}
        <h3>便签的应用</h3>
    
    {% for li in name_list %}
    
        <p>{{ li }}</p>
    
    {% endfor %}
        <hr>
    {#foorloop可以一次循环出所有的元素,并且每个元素并且每个元素也都有参数#}
    {% for foo in name_list %}
        <p>{{ forloop }}</p>
        <p>{{ forloop.counter }}</p>
        <p>{{ forloop.first }}</p>
        <p>{{ forloop.last }}</p>
        {% if forloop.first %}
            第一个
            {% elif forloop.last %}
                最后一个
            {% else %}
                中间一个
        {% endif %}
    {% endfor %}
        <hr>
    {#empty 对于for循环的对象是个控制,默认可以用这个给于设置默认提示#}
    {% for foo in empty_list %}
        {{ foo}}
        {% empty %}
        这个列表是空值,empty做提示必须放在for循环中
    {% endfor %}
        <hr>
    
    {#forloop.parentloop 列表套列表的情况#}
    {% for foo in li %}
            {{ foo }}
        <hr>
            {{ forloop }}
        <hr>
        {% for i in foo %}
                {{ i }}
            <hr>
                {{ forloop }}
                {{ forloop.parentloop }} #子列表的父类表
        {% endfor %}
    
    {% endfor %}


    <br>
    {# with方法取值:作用就是如果后面只比较长的时候可以明个名字,通过中间名调用取值#}
    {% with n=name_dic.age %}
    <P>with字典正常查值:{{ name_dic.age }}</P>
    <p>with方法查询字典值:{{ n }}</p>
    {% endwith %}

    {# with ...as 方法取值#}
    {% with name_dic.name as aa %}
    <P>with as方法查询取值: {{ aa }}</P>
    {% endwith %}


    {# for循环取字典value的值#}

    {% for key in name_dic.keys %}
    <P>字典的key值:{{ key }}</P>

    {% endfor %}

    {% for value in name_dic.values %}
    <p>字典的value值:{{ value }}</p>
    {% endfor %}

    {% for key,value in name_dic.items %}
    <p>字典的value值:{{ key }}--- {{ value }}</p>
    {% endfor %}
    </body> </html>

    views响应视图里面的配套设置(辅助模板的运行)

    from django.shortcuts import render,HttpResponse
    
    # Create your views here.
    class Person:
        def __init__(self,name):
            self.name=name
        @classmethod
        def calss_test(cls):
            print('Person_class method')
            render('class method')
        def test(self):
            print('method')
            return self.name
    
    
    def index(request):
        name='zhangsanaaaaaaaaaaaaaa'
        age=23
        name_list=['zhangsan','lisi','wangwu']
        name_dic={'name':'yangzhizong','age':23}
        import datetime
        now = datetime.datetime.now()
        empty_list=[]
        empty_dic={''}
        file=1024
        str_str='libailovelisi'
        str_str2='libai love lisi zhangsan love who '
        ss3='<a href="https://www.baidu.com">点击</a>'
        add_num=12
        li=[[1,2,3],[4,5,6],[7,8,9]]
    
        #将上面定义的逐一渲染到页面
        # return render(request,'index.html',{'name':name,'age':age,'name_list':name_list})
        #对模板里已经调用的会一次性从上面拿到渲染进模板
        return render(request,'index.html',locals())

    自定义过滤器{{ }}:

    例如:自定义一个过滤器方法,完成2个字符串拼接

    1.settings.py里面确认是否将自己的app文件夹添加到

    INSTALLED_APPS =[  ]

    2.在app目录下面创建一个templatetags文件夹(名字固定)

    3.在第二步创建的文件夹下面自己写一个py文件,名字可以自己定义:例如my_filter

    4.导入from django import template 模块 

    5.做一个注册:register = template.Library()

    6.写函数addrstr( 并且用register.filter() 进行装饰)

    7.写html模板

    {% load my_filter %}  指定你定义的过滤器方法名 
    {{ 'lqz'|tt:'isbig' }}  传2个字符串完成拼接(最多只能拼接2个字符串)

    重要备份的配置信息及截图:
    from django import template
    
    #做一个注册
    register = template.Library()
    
    #写函数并且用@register.filter给自定义函数做装饰(tt就是重命名我的过滤器方便在html里面调用)
    @register.filter(name='tt')
    def addrstr(x,y):
        return x+y
    my_filter.py
    from django import template
    
    #做一个注册
    register = template.Library()
    
    #写函数并且用@register.filter给自定义函数做装饰(tt就是重命名我的过滤器方便在html里面调用)
    @register.filter(name='tt')
    def addrstr(x,y):
        return x+y
    index.html模板配置

    截图信息如下

     

    自定义标签{% %}:

    1.settings.py里面确认是否将自己的app文件夹添加到

    INSTALLED_APPS =[  ]

    2.在app目录下面创建一个templatetags文件夹(名字固定)

    3.在第二步创建的文件夹下面自己写一个py文件,名字可以自己定义:例如my_filter

    4.导入from django import template 模块 

    5.做一个注册:register = template.Library()

    6.写函数my_sum@register.simple_tag(name='yy')并且装饰

      @register.simple_tag(name='yy')

      def my_sum(x,y,z,i)

      return x+y+z+i

    7.html模板便签里面的调用 

    {% load my_filter %}
    {% yy 12 3 17 89  %}

    图解如下:

     

  • 相关阅读:
    Mysql存储引擎概念特点介绍及不同业务场景选用依据
    python
    nginx使用keepalived实现高可用
    python-文件操作(1)
    浏览器缓存知识小结及应用
    cookie 和 session
    tcp三次握手
    TCP/IP系列——长连接与短连接的区别
    python
    python- 迭代器与生成器
  • 原文地址:https://www.cnblogs.com/yangzhizong/p/9598671.html
Copyright © 2020-2023  润新知