一、模板简介
当用户发起请求时,视图函数可以返回一个模板给到用户,该模板是一个html文件。而要将后端查询到的数据通过模板返回给用户则需要进行进行Django模板语法处理。
模板语法重点
- 变量 {{变量名}}
- 深度查询 句点符用法
- 过滤器
- 标签 {% %}
二、模板之变量
1.将各个变量值传入模板
-
字符串模板传入
在view函数中定义一个字符串变量
- view试图函数如下
# 1.定义hi变量的值为hello! # 2.定义模板变量hi的值为变量hi # 3.模板变量名与python定义的变量名不是一类 def test(request): hi = "hello!" return render(request,"index.html",{"hi":hi})
- 模板文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h4>{{ hi }}</h4> </body> </html>
- 列表模板传入
- view试图函数如下
def test(request): L1 = ['alex','金老板','武佩琪'] return render(request,"test.html",locals())
- 模板文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h4>{{ L1 }}</h4> </body> </html>
- 数值模板传入
- view试图函数如下
def test(request): str1 = 12131 return render(request,"test.html",locals())
- 模板文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h4>{{ str1 }}</h4> </body> </html>
- 字典模板传入
- view试图函数如下
def test(request): dic1 = {'name':'alex','age':34} return render(request,"test.html",locals())
- 模板文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h4>{{ dic1 }}</h4> </body> </html>
- 对象模板传入
- view试图函数如下
def test(request): class An(object): def __init__(self,name,age): self.name = name self.age = age alex = An('alex',34) egon = An('egon',20) users = [alex,egon] return render(request,"test.html",locals())
- 模板文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h4>{{ alex }}</h4> </body> </html>
- 打印结果
<app01.views.test.<locals>.An object at 0x000001DBF41453C8> <!-- 打印出一个对象值->
2.通过句点符获取数据
- 有些复杂数据例如列表字典对象等它需要通过句点符获取其内部的值
-
通过句点符获取列表的值
- view试图函数如下
def test(request): L1 = ['alex','金老板','武佩琪'] return render(request,"test.html",locals())
- 模板文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h4>{{ L1.1 }}</h4> </body> </html>
- 打印的值内容
金老板 <!-- 获取列表的第二个元素'金老板' ->
- 通过句点符获取字典的值
- view试图函数如下
def test(request): dic1 = {'name':'alex','age':34} return render(request,"test.html",locals())
- 模板文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h4>{{ dic1.name }} {{ dic1.age }}</h4> </body> </html>
- 打印值内容
alex 34 <!-- 分别获取到字典dic1的值 ->
- 通过句点符获取对象的值
- view试图函数如下
def test(request): class An(object): def __init__(self,name,age): self.name = name self.age = age alex = An('alex',34) egon = An('egon',20) return render(request,"test.html",locals())
- 模板文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h4>{{ alex.name }}</h4> </body> </html>
- 打印值内容
alex <!-- 打印对象中的值 ->
3.过滤器使用
- 过滤器的功能主要是将数据进行处理例如格式化时间序列
- Django常见的内置过滤器:
- default 如果一个变量是false或者为空,使用给定的默认值。
- length 返回值的长度,它对字符串和列表都起作用
- filesizeformat 格式化一个可读的文件尺寸
- date 格式化时间序列
- truncatechars 省略文字变量
- 过滤器还有很多,以上只是梳理常用的过滤器
1.default过滤器
-
view试图函数
def test(request): hi = " Give me the strength to make my love fruitful in service." return render(request,"test.html",locals())
- 模板文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h4>{{ hiii|default:'没有符合条件的查询' }}</h4> </body> </html>
- 打印结果
没有符合条件的查询 <!-- 可以看到如果没有变量hiii则它默认会打印一个自己定义的值 ->
2.length
- view试图函数
def test(request): L1 = ['alex','金老板','武佩琪'] return render(request,"test.html",locals())
- 模板文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h4>{{ L1|length }}</h4> </body> </html>
- 打印结果
3 <!-- 可以看到将列表的长度换算出来了 ->
3.filesizeformat
- view试图函数
def test(request): str1 = 12131342432532535 return render(request,"test.html",locals())
- 模板文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h4>{{ str1|filesizeformat }}</h4> </body> </html>
- 打印结果
10.8 PB <!-- 将数值换算成可读数值 ->
4.date
- view试图函数
def test(request): now = datetime.datetime.now() return render(request,"test.html",locals())
- 模板文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h4>{{ now|date:"Y-m-d H:i:s" }}</h4> </body> </html>
- 打印结果
2019-11-28 10:40:41 <!-- 可以看到格式化化之后的时间 ->
5.truncatechars
- view试图函数
def test(request): hi = " Give me the strength to make my love fruitful in service." return render(request,"test.html",locals())
- 模板文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h4>{{ hi|truncatechars:20 }}</h4> </body> </html>
- 打印结果
Give me the streng… <!-- 对比原始字符串省略了很多 ->
三、模板之标签
- 标签的结构{% tag %}
- 常见的标签
- for标签
- if标签
- 同时还可以进行自定义标签
1.for标签
- view试图文件
def test(request): L1 = ['alex','金老板','武佩琪'] return render(request,"test.html",locals())
- 模板文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul> {% for name in L1 %} <p>{{ forloop.counter }} {{ name }}</p> {% endfor %} </ul> </body> </html>
- 打印结果
1 alex 2 金老板 3 武佩琪 <!-- 可以看到通过循环打印数据 ->
2.if标签
- view试图文件
def test(request): L1 = ['alex','金老板','武佩琪'] return render(request,"test.html",locals())
- 模板文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul> {% for name in L1 %} {% if forloop.first %} <p style="color: red">{{ name }}</p> {% else %} <p>{{ name }}</p> {% endif %} {% endfor %} </ul> </body> </html>
- 打印结果
alex 金老板 武佩琪 <!-- 可以看到值alex已经变红了 ->
留言