模板语言: DTL

1变量
2 标签 { % 代码块 % }
3 过滤器
4 注释{# 代码或 html #}

1变量

语法:

{{ variable }}

 当模版引擎遇到一个变量,将计算这个变量,然后将结果输出

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

 当模版引擎遇到点("."),会按照下列顺序查询:

     字典查询,例如:foo["bar"] 

     属性或方法查询,例如:foo.bar 

     数字索引查询 ,例如:foo[bar] 

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

在模板中调用对象的方法

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

 在 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 callMethodInTemplate(request): 

        hero = HeroInfo(hname='abc') 

        context = {'hero': hero} 

        return render(request, 'booktest/detail2.html', context) 

 应用 urlcof 中添加:

url(r'^callMethodInTemplate/$', views.callMethodInTemplate), 

 在模板 detail2.html 中调用

{{hero.showName}} 
标签

 语法:{ % tag % }

for 标签

循环逻辑:{%for ... in ...%} 

注意:

1、%和{}中间没有空格 { % % }写法是不对的

2、Django 不支持退出循环操作。 如果想退出,可以让迭代变量仅包含需要迭代的项目。

3、Django 也不支持 continue 语句,我们无法让当前迭代操作跳回到循环头部。

语法:

 {{forloop.counter}} 

  表示当前是第几次循环 

 {%empty%} 

给出的列表空为或列表不存在时,执行此处 

 {%endfor%} 

范例

{%for item in heroList%} 

    
{{ forloop.counter }}: {{ item.showName }}
当前是第{{forloop.counter}}次循环
{%empty%}
给出的列表为或列表不存在时,执行此处
{%endfor%}

reversed 标签:使得该列表被反向迭代

{%for item in heroList% reversed %} 

if 标签

  {%if ...%} 

 逻辑 1 

 {%elif ...%} 

 逻辑 2 

 {%else%} 

 逻辑 3 

 {%endif%} 

范例

{%if hero.showName == '黄蓉'%} 

黄蓉
{%else%}
其他英雄
{%endif%}

注意:

hero.showName == 之间一定要有空格!

如果连在一起写 hero.showName== ,程序会将它们看成了一个整体而报错:

Could not parse the remainder: '=='1'' from 'sort=='1''

注释标签

多行注释

  { % comment % } 

多行注释

    { % endcomment % } 

范例

      {% comment %} 

    This is a 

   multi-line comment. 

     {% endcomment %} 

单行注释

    {#  这是一个注释  #} 

范例

   This is a {# this is nota comment #}test. 

include 标签

 加载模板并以标签内的参数渲染

     { %include "foo/bar.html" % } 

url 标签

 反向生成 url

    { % url 'name' p1 p2 %} 

范例

      {{ book.btitle }} 

csrf_token

 这个标签用于跨站请求伪造保护

   { % csrf_token %} 

布尔标签

 and、or ,and 比 or 的优先级高

其它标签

 block、extends :详见 “模板继承”

 autoescape :详见 “HTML转义”

过滤器

 语法

 { { 变量 |过滤器 }}

  例如{ { name|lower }} ,表示将变量 name 的值变为小写输出 

管道符号|

 应用于过滤器 ,通过使用过滤器来改变变量的计算结果

范例

在 if 标签中使用过滤器结合运算符

    if list1|length > 1 

 过滤器链

 过滤器能够被 “串联” ,构成过滤器链

   name|lower|upper 

 过滤器参数传递

 参数使用引号包起来

   list|join:", " 

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

slice

   value |slice:'10' 

 详细的过滤器

 https://docs.djangoproject.com/en/2.0/ref/templates/builtins/

示例

 查询所有英雄信息显示出来,要求奇数行显示为红色,偶数行显示为蓝色

你可能感兴趣的:(模板语言: DTL)