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代码,这样做的目的是为了处理一些不安全的变量。
<:转义成<; >:转义成>
‘:转义成';
":转义成";
&:转义成&;
例:
检查网页源代码时就会发现两者并不一样。
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' %}">
引入的格式是:{%静态文件目录名 ‘类型目录名/具体文件名’%}