模板语言: 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%} 

    <div>{{ forloop.counter }}: {{ item.showName }}</div> 

    <div>当前是第{{forloop.counter}}次循环 </div> 

{%empty%} 

    <div>给出的列表为或列表不存在时,执行此处 </div> 

{%endfor%} 

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

{%for item in heroList% reversed %} 

if 标签

  {%if ...%} 

 逻辑 1 

 {%elif ...%} 

 逻辑 2 

 {%else%} 

 逻辑 3 

 {%endif%} 

范例

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

<div>黄蓉 </div> 

{%else%} 

<div>其他英雄 </div> 

{%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 %} 

范例

      <a href="{% url 'booktest.views.detail' book.id %}">{{ book.btitle }}</a> 

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/

示例

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,288评论 19 139
  • 声明:转载请注明出处http://www.jianshu.com/p/1664dcfd840c 最近在折腾Djan...
    蛇发女妖阅读 6,334评论 1 10
  • autoescape 控制自动转义是否可用。on:开启自动转义off:关闭自动转义当自动转义生效时,所有变量内容会...
    马小跳_阅读 874评论 0 0
  • 介绍 Jinja是基于python的模板引擎,功能比较类似于于PHP的smarty,J2ee的Freemarker...
    ZhouLang阅读 8,017评论 0 2
  • 端午的星空闪烁 不说一句话 沉默是悲泣的外衣 流淌在心底的思念 奔涌在汨罗江永无休止的怒涛 别无选择 无可奈何 问...
    创典阅读 364评论 0 0