Django框架中方法的访问和查找


Posted in Python onJuly 15, 2015

在 Django 模板中遍历复杂数据结构的关键是句点字符 (.)。

最好是用几个例子来说明一下。 比如,假设你要向模板传递一个 Python 字典。 要通过字典键访问该字典的值,可使用一个句点:

>>> from django.template import Template, Context
>>> person = {'name': 'Sally', 'age': '43'}
>>> t = Template('{{ person.name }} is {{ person.age }} years old.')
>>> c = Context({'person': person})
>>> t.render(c)
u'Sally is 43 years old.'

同样,也可以通过句点来访问对象的属性。 比方说, Python 的 datetime.date 对象有 year 、 month 和 day 几个属性,你同样可以在模板中使用句点来访问这些属性:

>>> from django.template import Template, Context
>>> import datetime
>>> d = datetime.date(1993, 5, 2)
>>> d.year
1993
>>> d.month
5
>>> d.day
2
>>> t = Template('The month is {{ date.month }} and the year is {{ date.year }}.')
>>> c = Context({'date': d})
>>> t.render(c)
u'The month is 5 and the year is 1993.'

这个例子使用了一个自定义的类,演示了通过实例变量加一点(dots)来访问它的属性,这个方法适用于任意的对象。

>>> from django.template import Template, Context
>>> 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 }}.')
>>> c = Context({'person': Person('John', 'Smith')})
>>> t.render(c)
u'Hello, John Smith.'

点语法也可以用来引用对象的* 方法*。 例如,每个 Python 字符串都有 upper() 和 isdigit() 方法,你在模板中可以使用同样的句点语法来调用它们:

>>> from django.template import Template, Context
>>> t = Template('{{ var }} -- {{ var.upper }} -- {{ var.isdigit }}')
>>> t.render(Context({'var': 'hello'}))
u'hello -- HELLO -- False'
>>> t.render(Context({'var': '123'}))
u'123 -- 123 -- True'

注意这里调用方法时并* 没有* 使用圆括号 而且也无法给该方法传递参数;你只能调用不需参数的方法。 (我们将在本章稍后部分解释该设计观。)

最后,句点也可用于访问列表索引,例如:

>>> from django.template import Template, Context
>>> t = Template('Item 2 is {{ items.2 }}.')
>>> c = Context({'items': ['apples', 'bananas', 'carrots']})
>>> t.render(c)
u'Item 2 is carrots.'

不允许使用负数列表索引。 像 {{ items.-1 }} 这样的模板变量将会引发`` TemplateSyntaxError``

Python 列表类型

一点提示: Python的列表是从0开始索引。 第一项的索引是0,第二项的是1,依此类推。

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

  •     字典类型查找 (比如 foo["bar"] )
  •     属性查找 (比如 foo.bar )
  •     方法调用 (比如 foo.bar() )
  •     列表类型索引查找 (比如 foo[bar] )

系统使用找到的第一个有效类型。 这是一种短路逻辑。

句点查找可以多级深度嵌套。 例如在下面这个例子中 {{person.name.upper}} 会转换成字典类型查找( person['name'] ) 然后是方法调用( upper() ):

>>> from django.template import Template, Context
>>> person = {'name': 'Sally', 'age': '43'}
>>> t = Template('{{ person.name.upper }} is {{ person.age }} years old.')
>>> c = Context({'person': person})
>>> t.render(c)
u'SALLY is 43 years old.'
Python 相关文章推荐
在Python的Flask框架中使用模版的入门教程
Apr 20 Python
简单实现python爬虫功能
Dec 31 Python
Python基于FTP模块实现ftp文件上传操作示例
Apr 23 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 Python
python变量赋值方法(可变与不可变)
Jan 12 Python
对python tkinter窗口弹出置顶的方法详解
Jun 14 Python
Python 3 判断2个字典相同
Aug 06 Python
Django中间件拦截未登录url实例详解
Sep 03 Python
python框架django项目部署相关知识详解
Nov 04 Python
TensorFlow使用Graph的基本操作的实现
Apr 22 Python
python实现数字炸弹游戏程序
Jul 17 Python
python定时截屏实现
Nov 02 Python
Python的Django框架中的Context使用
Jul 15 #Python
在Python的Django框架中创建和使用模版
Jul 15 #Python
详解Python的Django框架中的模版相关知识
Jul 15 #Python
Django中处理出错页面的方法
Jul 15 #Python
在Django中创建动态视图的教程
Jul 15 #Python
Python的Django框架中的URL配置与松耦合
Jul 15 #Python
Django查找网站项目根目录和对正则表达式的支持
Jul 15 #Python
You might like
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
2009/10/11 PHP
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
PHP生成条形图的方法
2014/12/10 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
2016/02/14 PHP
ThinkPHP框架安全实现分析
2016/03/14 PHP
php实现查询功能(数据访问)
2017/05/23 PHP
基于php中echo用逗号和用点号的区别详解
2018/01/23 PHP
js 动态加载事件的几种方法总结
2013/12/25 Javascript
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
2016/05/31 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
jQuery AJAX timeout 超时问题详解
2016/06/21 Javascript
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
详解用vue-cli来搭建vue项目和webpack
2017/04/20 Javascript
javaScript产生随机数的用法小结
2018/04/21 Javascript
傻瓜式vuex语法糖kiss-vuex整理
2018/12/21 Javascript
layui的select联动实现代码
2019/09/28 Javascript
[01:42]TI4西雅图DOTA2前线报道 第一顿早饭哦
2014/07/08 DOTA
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
对python判断是否回文数的实例详解
2019/02/08 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
python线程信号量semaphore使用解析
2019/11/30 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
2020/05/26 Python
CSS3 倾斜的网页图片库实例教程
2009/11/14 HTML / CSS
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
《巨人的花园》教学反思
2014/02/12 职场文书
应届生求职信范文
2014/05/26 职场文书
某某同志考察材料
2014/05/28 职场文书
2014年党务工作总结
2014/11/25 职场文书
博士给导师的自荐信
2015/03/06 职场文书
2015年网管个人工作总结
2015/05/22 职场文书
课文《燕子》教学反思
2016/02/17 职场文书
预备党员入党思想汇报(范文)
2019/08/14 职场文书