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  %}

图解如下:

 

 

posted @ 2018-09-06 15:34  yangzhizong  阅读(1355)  评论(0编辑  收藏  举报