189 8069 5689

六、模板语言:变量,过滤器,标签等

模板语法之变量、模版之过滤器、模版之标签、自定义标签和过滤器

十多年的博白网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站的优势是能够根据用户设备显示端的尺寸不同,自动调整博白建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联公司从事“博白网站设计”,“博白网站推广”以来,每个客户项目都认真落实执行。

# 相当于print了该变量

urls.py

url(r'^index/', views.index),

views.py

from django.shortcuts import render

# Create your views here.
def index(request):
    name='s_jun'
    age=20
    li=[1,2,'s_jun','zone']
    l2=[]
    t1=(1,2,3,'a','b','3')
    s2={'h','t','d','q','b','v',9,6,4,3,}
    dic={'name':'s_jun','age':20,'str2':[9,'a',6,'x',3]}
    def test():
        print('test')
        return 'return test '
    print(test())
    # 类和对像
    class Person():
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def get_name(self):
            return self.name
        @classmethod
        def cls_test(cls):
            return 'cls'
        @staticmethod
        def static_test():
            return 'static'
        # 模板里不支持带参数
        # def get_name_cs(self,ttt):
        #     return self.name

    s_jun=Person('s_jun',20)
    zone=Person('zone',20)
    person_list=[s_jun,zone]
    person_dic={'s_jun':s_jun}
    # 函数不能打印内存地址,但可以把它放入到列表中,再打印内存地址(了解即可,(只打印内存地址))
    # locals 会把函数当中的变量传递给'index.html'的这个网页中去。
    file_size=1024
    import datetime
    ctim=datetime.datetime.now()
    h3='

我倒

'     script=''     #  # return render( request,'index.html',{'name':name})     user='s_jun'     return render(request,'index.html',locals())

templates/index.html




    
    模板语言之变量


名字:{{ name }}

年龄(数字类型):{{ age }}

列表:{{ li }}

元祖:{{ t1 }}

集合:{{ s2 }}

字典:{{ dic }}

函数:{{ test }}

对像:{{ s_jun }}

列表里套对象:{{ person_list }}

字典里套对象:{{ person_dic }}


深度查询

列表的第0个值:{{ li.0 }}

列表的第3个值:{{ li.3 }}

字典取值:{{ dic.name }}

字典取列表值:{{ dic.str2.2 }}

对象取数据属性:{{ s_jun.name }}

对象取绑定给对象的函数属性:{{ s_jun.get_name }}

对象取绑定给类的函数属性:{{ s_jun.cls_test }}

对象取静态方法:{{ s_jun.static_test }}

把对象列表中s_jun年龄取出来:{{ person_list.1.age }}

{#不能调有参数的方法#}

字符串的方法:{{ name.upper }}

模板语言之过滤器

{#后面就是个python中的函数,|前面的,是函数的第一个参数,冒号后面的是第二个参数#}

统计字符串长度:{{ name|length }}

统计列表长度:{{ li | length }}

过滤器之默认值:{{ l2| default:'空值' }}

过滤器之filesizeformat--1: {{443|filesizeformat }}

过滤器之filesizeformat--2: {{ file_size|filesizeformat }}

过滤器之不使用date:{{ ctim }}

过滤器之date:{{ ctim|date:'Y-m-d' }}

{#前闭后开区间#}

过滤器之slice:{{ li|slice:'2:-1' }}

{#支持步长#} {#

过滤器之slice-字符串:{{ name | slice: '0:3:3'}}

#} {#三个起步(显示10个,加上3个...是13个)#}

过滤器之truncatechars:{{ 'sdfaasdfdfsfpyyy'| truncatechars:13}}

{#根据空格来 显示的字段#}

过滤器之truncatewords:{{ '夺 jhk jh 我 kjhkl lkj 耻 囲 在 dslafj'| truncatewords:5 }}

过滤器之不用safe:{{ h3 }}

过滤器之用safe:{{ h3|safe }}

过滤器之不用safe:{{ script }}

{#

过滤器之用safe:{{ script|safe }}

#}

过滤器之用add:{{ 12|add:'1' }}

过滤器之用add:{{ 'egon'| add:'xxx' }}


模板语言之标签

{% for bar in li %} {{ forloop }}     

{{ forloop.first }} --->{{ forloop.counter0 }} --->{{ forloop.revcounter }}--->{{ bar }} 

{% endfor %}
{%  for bar in li %}     {% for i in person_list %} {#  取出外层是第几次循环#}  {{ forloop.parentloop.counter }}

 {{ forloop.first }}--->{{ forloop.counter0 }}---> {{ forloop.revcounter }}----> {{ bar }} 

{% endfor %} {% endfor %}
{# *************循环的对象是空,才会走到empty,而不是对象里面的东西为空 #} {% for bar in dic %}

{{ bar }}

{% empty %} {% endfor %}
{#只循环字典的话,取到的是key值#} {% for bar in dic %}

 {{ bar }} 

{% endfor %}
{#取到value的值#} {% for bar in dic.values %}     

{{ bar }}

    {% empty %} {% endfor %}
{#取到key 和 value的值#} {% for k,v in dic.items %}

{{ k }}-----> {{ v }}

{% empty %} {% endfor %}
{% if user %}     退出     {% else %}     登录     注册 {% endif %}
{#for循环判断如果是第一次,打印第一次,其他打印正常值#} {% for bar in li %}     {% if forloop.first %}         

第一次的我

    {% elif forloop.last %}         

最后的我

    {% else %}         

{{ bar }}

    {% endif %} {% endfor %}
{#with 相当于取别名,作用:变量太长,可以简化#} {% with name as ttt %}     {{ ttt }}     {{ name }}     {{ user }} {% endwith %}
{% with dic.li.2 as ttt %}     {{ ttt }}     {{ ttt }}     {% endwith %}
{#************for ,if,with 都要有结束*************#}

自定义标签过滤器

{% load mytag %} {#传多个参数的话:可以:'aaa:bb:cc',也可以:传列表#}

{{ 's_jun'| yyy:'nb' }}

使用自定义的标签

{% add_nb 's_jun' %}

{% add_3 's_jun' 'is' 'zone' %}


{#过滤器,可以用在if判断中#} {% if 's_jun'|yyy:'test' %}

{% endif %} {#标签不能用在if判断(报错)#} {#{% if add_nb 's_jun' %}#} {##} {#{% endif %}#}

# 自定义标签过滤器 (最好重启一下django项目)

app01目录下,目录名"templatetags"必须叫这个名字

app01/templatetags/mytag.py

# 第一步,导入template
from django.template import Library
# 第二步,定义一个叫register的变量=template.Library()
register=Library()
# 第三步
@register.filter(name='yyy')
def str_add(str1,str2):
    # 业务逻辑很复杂
    return str1 + str2
@register.simple_tag()
def add_nb(value):
    return value+'nb'
@register.simple_tag()
def add_3(value,value2,value3):
    return value+value2+value3

总结:

上节回顾:(模板层)
	1 模板之变量---{{ }}
		-支持数字,字符串,布尔类型,列表,字典---相当于对它进行了打印
		-函数--->相当于加括号运行(不能传参数)
		-对象--->内存地址,(如果重写__str__方法,打印的就是返回的内容)
	2 过滤器
		-length---计算长度
		-default----设默认值
		-filesizeformat---把数字转成文件大小格式
		-截断字符---最少是三
		-截断单词
		-data----格式化日期类型
		-add-----数字,字符串相加
		-slice----切片,首,尾,步长 '1:-1:2'
		-safe-----把前端代码渲染到页面,而不是直接显示
	3 标签
		-for  --用法跟python一样
		-if   --用法跟python一样
		-with --相当于取别名
	4 自定义标签
		-1 在app下创建一个模块,名字必须叫templatetags
		-2 创建任意一个py文件,my_tags.py
		-3 导入:from django.template import Library
		-4 注册:register=Library()
		-5 写一个函数,用register.simple_tag(name=可以写一个别名),装饰一下
		-6 使用(重启)
		-7 在模板里:{%load my_tags%}
		-8 {% 函数名字或者别名 %},传参,用空格分割
	5 自定义过滤器
		-1 在app下创建一个模块,名字必须叫templatetags
		-2 创建任意一个py文件,my_tags.py
		-3 导入:from django.template import Library
		-4 注册:register=Library()
		-5 写一个函数,用register.filter(name=可以写一个别名),装饰一下
		-6 使用(重启)
		-7 在模板里:{%load my_tags%}
		-8 {{ 函数名字或者别名 }},传参,最多传两个参数{{'参数一'|过滤器名字:'参数二'}}
	6 过滤器可以用在if判断中,标签不能


网站栏目:六、模板语言:变量,过滤器,标签等
分享链接:http://cdxtjz.cn/article/ghspdp.html

其他资讯