定义模板
1.模板语言包括
①变量。
②标签 { % 代码块 % }。
③过滤器。
④注释{# 代码或html #}。
2.变量
语法:
{{ variable }}
①当模版引擎遇到一个变量,将计算这个变量,然后将结果输出。
②变量名必须由字母、数字、下划线(不能以下划线开头)和点组成。
③当模版引擎遇到点("."),会按照下列顺序查询:
字典查询,例如:foo["bar"]。
属性或方法查询,例如:foo.bar。
数字索引查询,例如:foo[bar]。
④如果变量不存在, 模版系统将插入(空字符串)。
⑤在模板中调用方法时不能传递参数。
3.在模板中调用对象的方法
①在models.py中定义类BlogInfo。
from django.db import models class BlogInfo(models.Model): ... def showName(self): return self.hname
②在views.py中传递BlogInfo对象。
from django.shortcuts import render from models import * def index(request): hero = HeroInfo(hname='abc') context = {'hero': hero} return render(request, 'temtest/detail.html', context)
③在模板detail.html中调用。
{{hero.showName}}
4.标签
语法:{ % tag % }。
作用:
在输出中创建文本。
控制循环或逻辑。
加载外部信息到模板中供以后的变量使用。
①for标签
{ %for ... in ...%} # 循环逻辑 {{forloop.counter}} # 表示当前是第几次循环 { %empty%} # 给出的列表为或列表不存在时,执行此处 { %endfor%}
②if标签
{ %if ...%} # 逻辑1 { %elif ...%} # 逻辑2 { %else%} # 逻辑3 { %endif%}
③comment标签
{ % comment % } # 多行注释 { % endcomment % }
④include:加载模板并以标签内的参数渲染。
{ % include "foo/bar.html" % }
⑤url:反向解析
{ % url 'name' p1 p2 %}
⑥csrf_token:这个标签用于跨站请求伪造保护。
{ % csrf_token %}
⑦布尔标签:and、or,and比or的优先级高。
⑧block、extends:详细描述在模板继承。
常用过滤器
1.capfirst
把第一个字母改为大写。
{{value|capfirst}}
2.center,ljust,rjust
把字符串的内容居中,靠左,靠右对齐。
{{value|center:'12'}}
3.cut
把字符串中指定的字符删除。
{{value|cut:''}}
4.date
指定日期时间的输出格式。
{{value|date:'d M Y'}}
5.linebreaksbr
置换\n成为<br/>。
{{value|linebreaksbr}}
6.linenumbers
为每一行字符串加上行号。
{{value|linenumbers}}
7.lower
把字符串转换为小写。
{{value|lower}}
8.random
把前面串行元素使用随机的方式任选一个输出。
{{value|random}}
9.striptags
把所以的HTML标记全部删除。
{{value|striptags}}
10.truncatechars
提取指定字数的字符。
{{value|truncatechars:120}}
11.upper
把字符串转为大写。
{{value|upper}}
12.wordcount
计算字数。
{{value|wordcount}}
13.addslashes
为字符串需要的地方加上转义字符。
{{value|addslashes}}
14.default
如果没有值,就使用默认值。
{{value|default:'没有信息'}}
15.dictsort
为字典形式内容的变量排列顺序。
{{value|distort:'name'}}
16.dictsortreversed
上一指令的反向顺序。
17.divisibleby
测试数值数据是否可被指定的数整除。
{{value|divisibleby:5}}
18.escape
把字符串中的HTML标记变成显示用的字符串。
[{value|escape}}
19.filesizeformat
以人们习惯的方式显示文件大小的格式(KB,MB)。
{{value|filesizeformat}}
20.first,last
只取出列表数据的第一个,最后一个。
{{value|first}}
21.length
返回列表数据的长度。
{{value|length}}
22.length_is
测试数据是否为指定长度。
{{value|length_is:"3"}}
23.floatformat
以指定的浮点数格式显示数据。
{value|floatformat:3}}
24.linebreaks
将文字内容的换行符号转换为HTML的<br>和<p>。
{{value|linebreaks}}
25.safe
标记字符串为安全的,不需要再处理转义字符。
{{value|safe}}
26.slugify
把前面的字符串空格变成'-',让此字符串可以安全地放在网址上。
{{value|slugify}}
模板继承
1.模板继承
①模板继承可以减少页面内容的重复定义,实现页面内容的重用。
②典型应用:网站的头部、尾部是一样的,这些内容可以定义在父模板中,子模板不需要重复定义。
③block标签:在父模板中预留区域,在子模板中填充。
④extends继承:继承,写在模板文件的第一行。
⑤定义父模板base.html。
{ %block block_name%} # 这里可以定义默认值 # 如果不定义默认值,则表示空字符串 { %endblock%}
⑥定义子模板index.html。
{ % extends "base.html" %} # 在子模板中使用block填充预留区域 { %block block_name%} # 实际填充内容 { %endblock%}
2.说明
①如果在模版中使用extends标签,它必须是模版中的第一个标签。
②不能在一个模版中定义多个相同名字的block标签。
③子模版不必定义全部父模版中的blocks,如果子模版没有定义block,则使用了父模版中的默认值。
④如果发现在模板中大量的复制内容,那就应该把内容移动到父模板中。
⑤使用可以获取父模板中block的内容。
⑥为了更好的可读性,可以给endblock标签一个名字。
{ % block block_name %} # 区域内容 { % endblock block_name %}