模板语言包括:

  • 变量
  • 标签 { % 代码块 % }
  • 过滤器
  • 注释{# 代码或html #}

1.变量

  • 语法:
{{ variable }}
  • 当模版引擎遇到一个变量,将计算这个变量,然后将结果输出

  • 变量名必须由字母、数字、下划线(不能以下划线开头)和点组成

  • 当模版引擎遇到点("."),会按照下列顺序查询:
    ---- 1. 字典查询,例如:foo[“bar”]
    ---- 2. 属性或方法查询,例如:foo.bar
    ---- 3. 数字索引查询,例如:foo[bar]

  • 如果变量不存在, 模版系统将插入’’ (空字符串)

  • 在模板中调用方法时不能传递参数

2.在模板中调用对象的方法

  • 在models.py中定义类HeroInfo
from django.db import models

class HeroInfo(models.Model):
    ...
    def showName(self):
        return self.hname
  • 在views.py中传递HeroInfo对象
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}}

3.标签

语法:{ % 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:详见“模板继承”
  • autoescape:详见“HTML转义”

4.过滤器

  • 语法:{ { 变量|过滤器 }},例如{ { name|lower }},表示将变量name的值变为小写输出
  • 使用管道符号 (|)来应用过滤器
  • 通过使用过滤器来改变变量的计算结果
  • 可以在if标签中使用过滤器结合运算符
	if list1|length > 1
  • 过滤器能够被“串联”,构成过滤器链
	name|lower|upper

过滤器可以传递参数,参数使用引号包起来

list|join:", "

default:如果一个变量没有被提供,或者值为false或空,则使用默认值,否则使用变量的值

value|default:"什么也没有"

date:根据给定格式对一个date变量格式化

value|date:'Y-m-d'

escape:详见“HTML转义”

5.注释

单行注释

{#...#}

注释可以包含任何模版代码,有效的或者无效的都可以

{# { % if foo % }bar{ % else % } #}

使用comment标签注释模版中的多行内容