1103.模版变量及模版过滤器

Posted lxinghua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1103.模版变量及模版过滤器相关的知识,希望对你有一定的参考价值。

一、模版路径总结

在配置文件setting.py文件中找到TEMPLATES进行文件路径配置:

1. DIRS定义一个目录列表,模板引擎按流标顺序搜索这些目录以查询模板源文件。将templates放在主项目目录下:

2. APP_DIRS告诉模板引擎是否应该进入每个已安装的应用中查找模板,值为True则模板会去安装了的app下面的templates文件夹查找模板。所以我们也可以在每个app的狸猫创建模板目录templates存放模版,这种方式需要将这个app添加到setting.py文件的INSTALLED_APPS列表中。

二、模版变量

1. 语法: 变量名

2. 命名由字母和数字以及下划线组成,不能有空格和标点符号

3. 可以使用字典、模型、方法、函数、列表

4. 不要和python或django关键字重名

5. 变量和查找

注:

1. 如果data是一个字典,那么访问data.items将会访问data这个字典的key名的items的值,而不会访问字典的items方法;

2. 点在模板渲染时有特殊的含义。变量名中点表示查找。

app book/views.py文件

def hello():
    return \'django\'

class Fruits:
    def __init__(self, name, color):
        self.name = name
        self.color = color
    def say(self):
        return \'HAHAHAHA\'

ap = Fruits(\'apple\', \'red\')
ls = [\'x\', \'y\', \'z\']
dc = \'a\': 1, \'b\': 2

from django.shortcuts import render
def index_4(request):
    return render(request, \'book/index.html\', 
                        context=\'books_name\': \'python\',
                                       \'hello\': hello,
                                       \'fruits_say\': ap.say,
                                       \'fruits\': ap,
                                       \'list\': ls,
                                       \'dict\': dc,)

templates/book/index.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模板变量</title>
</head>
<body>
    这个变量是字符串对象: books_name <br>
    这个变量是函数对象: hello <br>
    这个变量是类方法对象: fruits_say <br>
    这个变量是类对象: fruits <br>
    这个变量是类对象,访问类对象的属性: fruits.name <br>
    这个变量是类对象,访问类对象的方法: fruits.say <br>
    这个变量是列表对象: list <br>
    这个变量是列表对象,访问列表的元素: list.1 <br>
    这个变量是字典对象: dict <br>
    这个变量是字典对象,访问字典的键: dict.a <br>
</body>
</html>

三、常用的过滤器

作用:对变量进行过滤。在真正渲染出来之前,过滤器会根据功能处理好变量,然后得出结果后再替换原来的变量展示出来。

语法:fruits|lower      

语法:fruits|lower|capfirst       管道符号进行链式调用,比如实现一个功能,先把所有字符变成小写,把第一个字符转换成大写。

语法:fruits|cut:" "         使用参数:过滤器可以使用参数,在过滤器名称后面使用冒号“:”在加上参数,比如要把一个字符串中所有的空格去掉,则可以使用cut过滤器

常用的过滤器:

date和time过滤器格式

例子:

自动转义:

四、静态文件引用

1. 创建文件 /static/js/myjs.js

2. 创建文件/static/css/mystyle.css

3. 创建文件/static/image/myimage.jpg

4. 创建模板/templates/book/static_test.html

Django框架模版渲染与过滤器使用

模版渲染

语法

#{{变量名}}  HTML页面中使用
    用后台返回的变量来替换HTML中的字段
    #获取后台返回的name变量,把他放到标签中
    <h1>{{ name }}</h1>
#{% 处理逻辑相关的  %}
    在前段用逻辑处理后态返回的数据,比如for循环,if判断,with取别名等python代码逻辑
    <ul>
        #获取后带返回的列表lst,循环列表,生成多个li标签
        {% for i in lst %}
        <li>{{ i }}</li>
        #声明for循环逻辑的结束
        {% endfor %}
    </ul>
    
    
'''后台返回数据的方式'''
#在请求返回的逻辑中,定义变量,用render的方式返回HTML页面的时候,把要返回的数据放在第三个参数,返回给前段,
def home(request):
    time=datetime.datetime.now()
    name='张达'
    dic={'name':'张达','age':'88','sex':[11,22,33]}
    lst=[11,22,33]
    lst1=[]
    class person():
        n = '张达666'
        def p(self):
            return '张达777'
    #返回数据的方式一: 使用locals()方法,获取当前函数中的所有局部变量,返回给前端
    return render(request,'home.html',locals())
    #返回数据的方式er:使用字典的方式返回数据,字典键相当于是给数据去一个别名,值就是数据
    return render(request,'home.html',{'name':name,'time':time,'dic':dic})

万能的点

    #通过索引获取列表的值
    <h1>{{ lst.1 }}</h1>
    #通过实例化对象来调用方法,获取返回值和类中的局部变量
    <h1>{{ obj.p }}</h1>
    #获取字典的所有键,值,键值对,获取的是一个
    <h1>{{ dic.items }}</h1>
    <h1>{{ dic.keys }}</h1>
    <h1>{{ dic.values }}</h1>

过滤器

'''都是在前端页面中使用'''
#default
    如果一个变量是false或者为空,使用给定的默认值。 否则,使用变量的值。
    {{ value|default:"nothing"}}#给value这个值设置一个默认值,如果value没有传值或者值为空的话就显示nothing
#length
    返回值的长度,作用于字符串和列表
    {{ value|length }}#返回value的长度,如 value=['a', 'b', 'c', 'd']的话,就显示4.
#filesizeformat
    将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)。例如:
    {{ value|filesizeformat }}#如果 value 是 123456789,输出将会是 117.7 MB。
#slice
    切片,如果 value="hello world",还有其他可切片的数据类型
    {{value|slice:"2:-1"}}
#date
    格式化时间,如果 value=datetime.datetime.now()
    {{ value|date:"Y-m-d H:i:s"}}
#safe
    后端发送一个字符串形式的TML标签,前端可以通过safe方法,把这个字符串变成前端标签
    value = "<a href='#'>点我</a>"   和   value="<script>alert('123')</script>"
    {{ value|safe}}#会把value变成一个标签,放到页面上
#truncatechars
    如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾
    {{ value|truncatechars:9}} #注意:最后那三个省略号也是9个字符里面的,也就是这个9截断出来的是6个字符+3个省略号,配合前端的点击事件就可以展开这三个点
#truncatewords
    在一定数量的字后截断字符串,是截多少个单词,以空格来计算字符串
    例如:‘hello girl hi baby yue ma’,
    {{ value|truncatewords:3}}  #得到的结果是 'hello girl h1...'
#cut
    移除value中所有的与给出的变量相同的字符串
    {{ value|cut:' ' }}#如果value为'i love you',那么将输出'iloveyou',移除空格
#join
    使用字符串连接列表,{{ list|join:', ' }},就像Python的str.join(list)
    <h1>{{ l1|join:'+' }}</h1>
#timesince(了解)
    计算时间差
    {{ blog_date|timesince:comment_date }}#comment_date减去blog_date的时间的时间差
#timeuntil(了解)
    和timesince一样,不过时间可以指定
    {{ conference_date|timeuntil:from_date }}#conference_date减去from_date的时间差

以上是关于1103.模版变量及模版过滤器的主要内容,如果未能解决你的问题,请参考以下文章

Django(自定义过滤器和自定义标签)

Django框架模版渲染与过滤器使用

django模板

django框架五

django框架五

jinja模版