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

mac2025-09-24  23

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

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

最新回复(0)