DAY75-Django框架(六)

一、模板层之变量

在模板中变量的使用:

​ {{ 变量名 }}

from django.shortcuts import render
# Create your views here.
def test(request):
    # 字符串
    str = 'abc'
    # 数值
    number = 123
    # 字典
    dic = {'name': 'xcq', 'age': 18}
    # 列表
    lis = [1, 2, 3, 4]
    # 元组
    tu = (5, 6, 7, 8)
    # 字典&列表
    dic_list = ['a', 1, {'zxc': 'asd'}]

    # 函数
    def test1():
        return 1
	#类
    class Student():
        def __init__(self, name, age):
            self.name = name
            self.age = age

        def study(self):
            return '学习'

        @classmethod
        def eat(cls):
            return 'cls'
    #对象
    xcq = Student('xcq',18)
    return render(request, 'test.html', locals())
变量
{#字符串#}
	<p>字符串:{{ str }}</p>
{#数值#}
	<p>数值:{{ number }}</p>
{#字典#}
	<p>字典:{{ dic }}</p>
{#列表#}
<p>列表:{{ lis }}</p>
{#元组#}
	<p>元组:{{ tu }}</p>
{#字典&列表#}
	<p>字典&列表:{{ dic_list }}</p>
{#类#}
	<p>类:{{ Student }}</p>
{#函数#}
	<p>函数:{{ test1 }}</p>

深度取值
{#列表取值#}
	<p>列表取值:{{ lis.1 }}</p>
{#字典取值#}
	<p>字典取值:{{ dic.name }}</p>
{#对象的数据属性#}
	<p>对象的数据属性:{{ xcq.name }}</p>
{#对象的函数属性#}
	<p>对象的函数属性:{{ xcq.study}}</p>
{#类的函数属性#}
	<p>类的函数属性:{{ xcq.eat}}</p>
方法的使用
	<p>方法的使用:{{ str.upper}}</p>

二、模板层之过滤器

语法

​ {{obj|filter__name:param}} 变量|过滤器名称:变量

常用过滤器

-length
	作用:统计变量的长度,没有第二参数
	语法:{{ 变量|length }}
	
-default
	作用:变量是false或者为空,使用默认值。否则,使用变量的值
	语法:{{ 变量|default:'默认值' }}
	
-slice
	作用:切片,顾首不顾尾
	语法:{{ 变量|slice:'起点:终点:步长(默认为1,可省略)' }}
	
-date
	作用:如果变量=datetime.datetime.now(),转化时间格式
	语法:{{ 变量|date:"Y-m-d"(时间格式) }}
	
-filesizeformat
	作用:将值格式化为一个 “人类可读的” 文件尺寸,默认单位是B。比如{{ 1024|filesizeformat }}  ===》 1KB
	语法:{{ 变量|filesizeformat}}
	
-truncatechars
	作用:将字符串以参数值截断制定的长度。截断的字符串的最后三位将以‘...’替换。
	语法:{{ 变量|truncatechars:'截断的字符数' }}

-truncatewords
	作用:将段落以参数值截断制定的长度。截断的段落的最后三位将以‘...’替换。
	语法:{{ 变量|truncatewords:'截断的字符数' }}

-safe
	作用:告诉模板吧,变量里的HTML标签和JS语法不要被转义,是安全的,可以使用的。
	语法:{{ 变量|safe }}

三、模板层之标签

语法

​ {% 标签 %}

常用标签

​ for标签

语法:	
	{% for person in person_list %}
        {{forloop}}
	{% empty %}

	{% endfor %}
作用:
	empty: 当被循环的为空,执行之后的操作
	forloop:
		 forloop.counter 当前循环的索引值(从1开始)
         forloop.counter0 当前循环的索引值(从0开始)
         forloop.revcounter 当前循环的倒序索引值(由1结束)
         forloop.revcounter0 当前循环的倒序索引值(由0结束)
         forloop.first       当前循环是不是第一次循环(布尔值)
         forloop.last        当前循环是不是最后一次循环(布尔值)
         forloop.parentloop  本层循环的外层循环

if 标签

语法:
	{% if 条件 %}
		内容
	{% elif 条件 %}
		内容
	{% else %}
		内容
	{% endif %}

with标签

语法:
	{% with 变量名 as 别名 %}
	
	
	{% endwith %}
作用:
	对于一些过长的变量,可以用with设置别名,在endwith之前都可以使用别名

注:标签不能用在for和if里

四、自定义标签和过滤器

#1 先app是不是已经在setting中注册

#2 在app下创建一个templatetags(****名字不能变***)的文件夹(模块)

#3 在模块下创建一个py文件,名字随意:mytag.py

#4 第一步,导入template
	from django.template import Library
    
  #第二步,定义一个叫register的变量=template.Library()
	register = Library()
    
#5 自定义标签与过滤器
	#自定义过滤器
	@register.filter(name='yyy')#装饰一下(可以指定别名)
    def str_add(str1, str2): 
        #一定要有返回值
        return str1 + str2
    
	#自定义标签
	@register.simple_tag()
    def add_nb(value):
        return value+'nb'
    
#6 在模板里:(新定定义的标签,过滤器,都要重启程序)

#导入自定义的py文件
{% load mytag %}

#使用自定义过滤器
{{'lqz'|str_add:'nb'}}

#使用自定义标签
{% add_nb 'lqz' %}
posted @ 2018-11-09 16:41  藏岚  阅读(124)  评论(0编辑  收藏  举报