哨兵

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  1. template是基于文本格式的文件(html文件也是文本格式),包含如下一些关键字:
    • variables:当template被evaluated时,variable会被替换成相应的值,variable在模板中的格式:{{variable}},如果variable不存在,模板会使用TEMPLATE_STRING_IF_INVALID设置的值替换变量,默认是‘’.template中方法调用也是变量的一种,如{{blog.entry_set.all.count}},注意方法做变量时没办法传递参数,所以只能是无参方法作变量
    • filters:用于修改variable,‘|’称为管道符,对变量应用filter,如{{name|low}},其中low就是一个filter,filter还可以有参数,也可以自定义filter。django中大概有三十种filter,常用的有:
      • default:如果变量是false或者空,使用default值替换variable,{{value|default:”nothing”}},default的值默认不转义
      • length:获取变量的长度,{{value|length}}
      • striptags:除去html标签,{{value|striptags}}:value中含有标签时,标签会被删除只返回value的剩余部分
      • escape:转义字符串中的html标签
      • safe:使变量输出不会进行html转义,如果设置了自动转义关闭,这个filter就会失效
    • comments:用于模板中注释,格式{##},注释中也可包含代码,{# {%if foo%}bar{%else%} #},模板evaluated时会正常执行
    • tags:控制template的逻辑,格式{% tag %},部分tag还要有{% endtag %},django自带大约二十多个tag,常用的如下:
      • for:用于数组循环
        for example
      • if,elif,和else:
        if example
      • block和extends:模板继承时使用,block表示可以在子模板中改写的块,同一模板中的block名字不能相同,extends表示用于继承父模板
  2. 模板继承:
    • 继承模板使用{% extends %},并且它必须是子模板中第一个tag
    • 推荐在base template中多使用{% block %}
    • 如果多个模板中有重复内容,则考虑将内容移到base template中的{% block %}下
    • 如果要在子模板的{%block%}中访问父模板的block内容可以使用{{block.super}}
  3. Django模板中默认开启了对用于输出的变量的html转义,如果要关闭转义功能,可以在变量,模板,site三个级别设置关闭
    关闭转义
  4. Context 类:传递给模板,作用是替换模板中的变量。Context对象是个stack,所以包含push和pop方法,构造函数中可以包含两个参数:
    • 一个字典型,用于映射变量名和变量值
    • 当前application的名字,当url有命名空间时有用
      Context
  5. RequestContext:Context的子类,其与Context有两个不同:
    • 第一个参数是HttpRequest对象
    • 会调用TEMPLATE_CONTEXT_PROCESSOR中的processor依次往RequestContext中加入一些预定义变量,自己也可以定义额外的processor再添加其他内容到RequestContext中
      RequestContext processor
  6. 使用模板通常有两个步骤:
    • compile模板存到一个对象中.模板只编译一次
    • 调用模板对象的render方法,参数是context
      Template example
  7. variable lookup:变量名中可以包含点,当点出现时,以{{foo.bar}}为例它的解析顺序为:
    • dictionary lookup,如foo[“bar”]
    • attribute lookup,如foo.bar
    • list-index lookup,如foo[bar]
    • method lookup
      Variable lookup
  8. method lookup时,注意以下几点:
    • 调用方法抛出异常时,如果异常类型设置了”静态属性”silent_variable_failure=true,则变量会被替换为空,否则会替换为异常信息
    • 如果方法含有参数,则变量会被替换为空
    • 在模板中调用某些方法会产生负面影响如model.delete().为了防止这种情况可以设置alters_data=true.这样方法不会被调用,而是用TEMPLATE_STRING_IF_INVALID替换变量的值。model.delete方法的alters_data默认为true
posted on 2014-10-07 21:29  哨兵  阅读(1034)  评论(0编辑  收藏  举报