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的迭代器与生成器实例详解
Jul 16 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
Dec 31 Python
python SMTP实现发送带附件电子邮件
May 22 Python
python3第三方爬虫库BeautifulSoup4安装教程
Jun 19 Python
python 处理telnet返回的More,以及get想要的那个参数方法
Feb 14 Python
详解PyCharm安装MicroPython插件的教程
Jun 24 Python
使用Python画股票的K线图的方法步骤
Jun 28 Python
Python OpenCV之图片缩放的实现(cv2.resize)
Jun 28 Python
详解python实现数据归一化处理的方式:(0,1)标准化
Jul 17 Python
基于Django静态资源部署404的解决方法
Jul 28 Python
pytorch使用tensorboardX进行loss可视化实例
Feb 24 Python
python 数据类型强制转换的总结
Jan 25 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中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
2012/12/10 PHP
ThinkPHP模板判断输出Defined标签用法详解
2014/06/30 PHP
php使用curl简单抓取远程url的方法
2015/03/13 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
2019/09/16 PHP
显示js对象所有属性和方法的函数
2009/10/16 Javascript
flexigrid 类似ext grid的JS表格代码
2010/07/17 Javascript
jquery无缝向上滚动实现代码
2013/03/29 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
对javascript继承的理解
2016/10/11 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
JS实现百度搜索框
2021/02/25 Javascript
[03:24]2014DOTA2国际邀请赛 神秘商店生意火爆
2014/07/18 DOTA
Python 的描述符 descriptor详解
2016/02/27 Python
Python爬虫框架Scrapy常用命令总结
2018/07/26 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
对Python w和w+权限的区别详解
2019/01/23 Python
python程序变成软件的实操方法
2019/06/24 Python
一篇文章搞定Python操作文件与目录
2019/08/13 Python
关于python字符串方法分类详解
2019/08/20 Python
基于Python实现大文件分割和命名脚本过程解析
2019/09/29 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
涉外文秘个人求职的自我评价
2013/10/07 职场文书
技校个人求职信范文
2014/01/25 职场文书
《哪吒闹海》教学反思
2014/02/28 职场文书
满月酒主持词
2014/03/27 职场文书
文员岗位职责
2015/02/04 职场文书
美容院管理规章制度
2015/08/05 职场文书
《夜莺的歌声》教学反思
2016/02/22 职场文书
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS