应用把变量传递到模板,你可能在模板中弄混。变量上面也可以有你能访问的属性或元 素。变量看起来是什么,完全取决于应用提供了什么。
你可以使用点( . )来访问变量的属性,作为替代,也可以使用所谓的“下标”语 法( [])。下面的几行效果是一样的:
~~~
{{ foo.bar }}
{{ foo['bar'] }}
~~~
知晓花括号 *不是* 变量的一部分,而是打印语句的一部分是重要的。如果你访问标签 里的不带括号的变量。
如果变量或属性不存在,会返回一个未定义值。你可以对这类值做什么取决于应用的配 置,默认的行为是它如果被打印,其求值为一个空字符串,并且你可以迭代它,但其它 操作会失败。
实现
为方便起见,Jinja2 中 foo.bar 在 Python 层中做下面的事情:
* 检查 foo 上是否有一个名为 bar 的属性。
* 如果没有,检查 foo 中是否有一个 'bar' 项 。
* 如果没有,返回一个未定义对象。
foo['bar'] 的方式相反,只在顺序上有细小差异:
* 检查在 foo 中是否有一个 'bar' 项。
* 如果没有,检查 foo 上是否有一个名为 bar 的属性。
* 如果没有,返回一个未定义对象。
如果一个对象有同名的项和属性,这很重要。此外,有一个 [attr()](http://docs.jinkan.org/docs/jinja2/templates.html#attr "attr") 过滤 器,它只查找属性。
- 介绍
- 预备知识
- 安装
- 基本 API 使用
- 实验性的 Python 3 支持
- API
- 基础
- Unicode
- 高层 API
- 自动转义
- 标识符的说明
- 未定义类型
- 上下文
- 加载器
- 字节码缓存
- 实用工具
- 异常
- 自定义过滤器
- 求值上下文
- 自定义测试
- 全局命名空间
- 低层 API
- 元 API
- 沙箱
- API
- 运算符拦截
- 模板设计者文档
- 概要
- 变量
- 过滤器
- 测试
- 注释
- 空白控制
- 转义
- 行语句
- 模板继承
- HTML 转义
- 控制结构清单
- 导入上下文行为
- 表达式
- 内置过滤器清单
- 内置测试清单
- 全局函数清单
- 扩展
- 自动转义扩展
- 扩展
- 添加扩展
- i18n 扩展
- 表达式语句
- 循环控制
- With 语句
- 自动转义扩展
- 编写扩展
- 集成
- Babel 集成
- Pylons
- TextMate
- Vim
- 从其它的模板引擎切换
- Jinja1
- Django
- Mako
- 提示和技巧
- Null-Master 退回
- 交替的行
- 高亮活动菜单项
- 访问父级循环