django模板系统

filter过滤器:它是一种最便捷的转化变量输出格式的方法  eg.{{ship_date|date:"F,jY"}} 此处通过管道符将变量ship_date传递给date过滤器,同时指定参数,date过滤器将根据指定参数,格式化输出;

 

 

深度变量查找:

模板系统能够非常简洁的处理复杂数据结构,例如,列表、字典、自定义类型

在django中遍历复杂数据结构的关键是句点操作符(.)

 

from django.template import Template, Context
from django.http import HttpResponse


def renderTemplate(request):
    t = Template("My name is {{person.name}}")
    ctx = Context({'person':{'name':'Bob','age':10}})
    return HttpResponse(t.render(ctx))
class Person(object):
    def __init__(self,first_name, last_name):
        self.first_name, self.last_name = first_name, last_name
t = Template('Hello,{{ person.first_name}}{{ person.last_name.upper}}')
ctx = Context({'person': Person('John', 'Smith')})
print t.render(ctx)

备注: 模板系统中,通过句点操作符,你只能调用不带参数的方法,例如,upper方法

 

句点也可用于访问列表索引:

eg.  

t = Template("item 2 is {{items.1}}")

ctx = Context({'items':['item1','item2','item3','item4','item5']})

print t.render(ctx)

不允许使用负数列表索引

句点查找规则可概括为:当模板系统在变量中遇到句点时,按照以下顺序尝试进行查找(短路逻辑):

1. 字典类型查找 foo["bar"]

2. 属性查找 foo.bar

3. 方法调用  foo.bar()

4. 列表类型索引查找 foo[bar]

 

方法调用行为:

在方法查找过程中,如果某方法抛出一个异常,除非该异常有一个silent_variable_failure属性并且值为True,否则的话,它将被传播;

当异常没有传播时(silent_variable_failure = True),模板里指定变量会被置为空字符串

def delete(self):

  #ToDo

delete.alerts_data = True

如上这种情况下,模板系统不会执行任何以该方式进行标记的方法,如果模板文件里包含了{{acount.delete}} ,对象又有delete()方法,而这个方法又有

delete.alerts_data = True属性,那么在模板载入时,delete将不会被执行,它将静静的错误退出

 

如何处理无效变量:

默认情况下,如果一个变量不存在,模板系统会把它展示为空字符串,不做任何事情来表示失败;

 

posted @ 2016-09-13 01:57  神圣兽国窝窝乡独行侠  阅读(193)  评论(0编辑  收藏  举报