(四)模板变量、模板过滤器、静态文件

1.模板变量

book/views.py

传列表,元祖,字典,字符串,方法等。

ls = ['a','b','c','d']
tu = ('q','w','e','r')
dc = {'x':1,'y':2}
str = "My name is xiaoming"
def hello():
    return 'Django!'
class Fruits:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def say(self):
        return 'thanks for your view!'
fru = Fruits('xiaoming','20')
def book_index2(request):
    return render(request,'book/book_index.html',context={'name':fru.name,
                                                              'age':fru.age,
                                                              'list':ls,
                                                              'tuple':tu,
                                                              'dict':dc,
                                                              'str':str,
                                                              'fruits':fru,
                                                              'fruits1':fru.say,
                                                              'hello':hello
                                                              })

bool/urls.py

path('book_index2/',views.book_index2)

book_index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>book的前端页面</title>
</head>
<body>
<p>我是Book页面index</p>

{{ name}}<br>
{{ age }}<br>
{{ list.1}}<br>
{{ tuple.1 }}<br>
{{ dict.y }}<br>
{{ str}}<br>
{{ fruits.age }}<br>
{{ fruits1 }}<br>
{{ hello }}
</body>
</html>

在这里插入图片描述
模板变量使用规则:
1.语法:{{变量名}}
2.命名由字母和数字以及下划线组成,不能有空格和标点符号。
3.可以使用字典,模型,方法,函数,列表。
4.不要和python或django关键字重名。
5.变量和查找
(1)如果data是一个字典,那么访问data.items将会访问data这个字典的key名为items的值
(2)点在模板渲染时有特殊含义,变量名中点表示查找

2.模板过滤器

模板过滤器作用:对变量进行过滤,在真正渲染出来之前,过滤器会根据功能处理好变量,然后得出结果后再替换掉原来的变量显示出来。
语法:{{fruits|lower}}

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

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

注意:使用参数的时候,冒号和参数之间不能有任何空格,一定要紧挨着。

把book/views.py中str字符串全改成大写

str = "MY NAME IS XIAOMING"

在这里插入图片描述
然后可以利用过滤器把str字符串全改成小写。
book_index.html

{{ str|lower}}<br>

在这里插入图片描述

然后可以再加次过滤,把str转为大写,方法是upper
book_index.html

{{ str|lower|upper}}<br>

在这里插入图片描述
其他例子:
1.首字母大写:

{{ str|lower|capfirst}}<br>

2.如果一个变量为空,可以设置默认值,方法default

{{ test|default:'xxxxxx' }}

3.如果默认值为None的话,可以使用default_if_none,设置值。

book/views.py
def book_index2(request):
    return render(request,'book/book_index.html',context={'name':fru.name,
                                                              'age':fru.age,
                                                              'list':ls,
                                                              'tuple':tu,
                                                              'dict':dc,
                                                              'str':str,
                                                              'fruits':fru,
                                                              'fruits1':fru.say,
                                                              'hello':hello('aaa'),
                                                              'set':se,
                                                              'test':''
                                                              })

book_index.html

default_if_none{{ test|default_if_none:‘abcd’ }}

如果test是空字符串,而不是None,设置的’abcd’不会显示在网页上。
在这里插入图片描述
如果test设置为None,

'test':None

在这里插入图片描述
4.first 返回列表中第一个值

{{ list|first}}<br>

5.last 返回列表中最后一个值

{{ list|last}}<br>

4.add 字符串相加,数字相加,列表相加,如果失败,会返回一个空字符串

{{ num1 | add:num2 }}

5.datetime

'now':datetime.datetime.now

在这里插入图片描述
这里显示的时间需要转换一哈,在settings.py里需要将TIME_ZONE = 'UTC’改为TIME_ZONE = ‘Asia/Shanghai’在这里插入图片描述
时间格式转换
24小时制

24小时制 {{ now|date:'Y/m/d/H:i:s' }}

在这里插入图片描述
time小时制

time小时制 {{ now|time:'h:i:s' }}

在这里插入图片描述

6.truncatechars
根据后面给参数,截断字符,如果超过了用…表示

字符串只显示4个字符,其他得省略{{ str|truncatechars:4 }}

这里得写的显示4个字符,但是只会显示3个字符。‘M’,‘Y’,和空格
在这里插入图片描述
7.truncatewords
同truncatewords,这个是以一个单词为单位进行截断。

字符串显示2个词,其他得省略{{ str|truncatewords:2 }}

在这里插入图片描述
8.striptags、safe
striptags:去掉所有的html标签
safe:关闭变量的自动转义

'tag':'<h1>我是标题标签</h1>'
标题标签 {{ tag }}<br>
去掉标签 {{ tag|safe }}<br>
取消自动转义显示 {{ tag|striptags }}<br>

在这里插入图片描述
关于自动转义:自动转义是将变量的一些特殊字符,比如左箭头(<),右箭头(>),转义成html代码,这样做的目的是为了处理一些不安全的变量。
<:转义成&lt; >:转义成&gt
‘:转义成&#39;
":转义成&quot;
&:转义成&amp;

例:
在这里插入图片描述
检查网页源代码时就会发现两者并不一样。
在这里插入图片描述

8.slice
切割列表、字符串等,用法跟python中的切片操作是一样的,区间是前闭合后开放

str = "MY NAME IS XIAOMING"
ls = ['a','b','c','d']
字符串切片{{ str|slice:'1:4' }}<br>
列表切片 {{ list|slice:'1:2' }}<br>

在这里插入图片描述

9.floatformat
浮点数格式化

'float':3.1415926
小数 {{ float }}<br>
小数 {{ float|floatformat }}<br>
小数 {{ float|floatformat:5 }}<br>

在这里插入图片描述

3. 静态文件

静态文件目录:
在项目目录下创建static的目录,为了区分开各种类型的文件分别创建css,image,js的目录。
在这里插入图片描述
然后在根目录下的settings.py下添加static路径,

STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static')
]

在这里插入图片描述
加载静态文件,在book_index.htm最顶行加载

{%load static%}

引入css,

<head>
    <meta charset="UTF-8">
    <title>book的前端页面</title>
    #引入css
    <link rel="stylesheet" href="{% static 'css/test_css.css' %}">
</head>

引入脚本文件和图片

<script src="{% static 'js/test_js.js'%}"></script>
<img src="{% static 'image/20171208170014710.jpg' %}">

引入的格式是:{%静态文件目录名 ‘类型目录名/具体文件名’%}

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44204361/article/details/102860453