Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】

模板语言

模板语言简称为DTL(Django Template Language)

模板变量

模板变量名由数字,字母,下划线和点组成,不能以下划线开头。
使用:{{模板变量名}}

?
1
2
3
4
5
6
7
8
9
10
11
12
def index2(request):
   '''模板加载顺序'''
   return render(request, 'booktest/index2.html' )
# /temp_var
def temp_var(request):
   '''模板变量'''
   my_dict = { 'title' : '字典键值' }
   my_list = [ 1 , 2 , 3 ]
   book = BookInfo.objects.get( id = 1 )
   #定义模板上下文
   context = { 'my_dict' :my_dict, 'my_list' :my_list, 'book' :book}
   return render(request, 'booktest/temp_var.html' ,context)

模板变量可以是字典,列表或者对象。定义好模板上下文之后,用render()函数传递给html

?
1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
< html lang = "en" >
< head >
   < meta charset = "UTF-8" >
   < title >模板变量</ title >
</ head >
< body >
使用字典属性:{{ my_dict.title }}
使用列表元素:{{ my_list.1 }}
使用对象属性:{{ book.btitle }}
</ body >
</ html >

可以看到模板变量都是通过 . 调用的。

模板标签

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE html>
< html lang = "en" >
< head >
   < meta charset = "UTF-8" >
   < title >模板标签</ title >
   < style >
     .red{
      
     }
     .yellow{
      
     }
     .green{
      
     }
   </ style >
</ head >
< body >
< ul >
   {% for book in books %}
     {% if book.id <= 2 %}
     < li class = "red" >{{ forloop.counter }}--{{ book.btitle }}</ li >
     {% elif book.id >= 5 %}
       < li class = "yellow" >{{ forloop.counter }}--{{ book.btitle }}</ li >
     {% else %}
       < li class = "green" >{{ forloop.counter }}--{{ book.btitle }}</ li >
     {% endif %}
   {% endfor %}
</ ul >
</ body >
</ html >

具体的其他的模板标签可以参考Django官方文档。

过滤器

过滤器用于对模板变量进行操作

date:改变日期的显示格式
length:求长度,字符串,列表,元祖,字典
default:设置模板变量的默认值

格式:模板变量 | 过滤器:参数

date过滤器

?
1
< li class = "red" >{{ book.btitle }}--{book.bpub_date | date:'Y年-m月-d日'}</ li >

default过滤器 {{dd | default:'无'}}

模板注释

单行注释:{# 注释 #}

多行注释:{% comment %}

模板继承

不同页面可能有相同的模块,这时候可以使用模板继承减少代码量

base.html内容

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
< html lang = "en" >
< head >
   < meta charset = "UTF-8" >
   < title >父模板</ title >
</ head >
< body >
< h1 >导航条</ h1 >
{% block b1 %}
   < h1 >这是父模板b1块中的内容</ h1 >
{% endblock b1 %}
< h1 >版权信息</ h1 >
</ body >
</ html >

child.html内容

?
1
2
3
4
5
{% extends 'booktest/base.html' %}
{% block b1 %}
   {{ block.super }}
   < h1 >这是子模板b1的内容</ h1 >
{% endblock b1 %}

在父模板中{% block b1 %} <h1>这是父模板b1块中的内容</h1> {% endblock b1 %}
定义一个预留快,预留块中可以有内容。子模板继承时,{% extends 'booktest/base.html' %}导入,{% block b1 %} {{ block.super }} <h1>这是子模板b1的内容</h1> {% endblock b1 %}写预留块,{{ block.super }}继承预留快的内容。

html转义

通过render()函数传递过来的模板上下文默认是转义的,也就是说我们想传递html语言的时候,实际上传递过来的是字符串,这个时候我们可以通过过滤器关闭转义

?
1
{{context | safe}}

猜你喜欢

转载自www.cnblogs.com/motinutlat/p/10911790.html