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中对list去重的多种方法
Sep 18 Python
python 统计代码行数简单实例
May 04 Python
python Flask实现restful api service
Dec 04 Python
Python实现的直接插入排序算法示例
Apr 29 Python
Python3.6连接Oracle数据库的方法详解
May 18 Python
python 多线程中子线程和主线程相互通信方法
Nov 09 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
Dec 14 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
Jul 26 Python
Python面向对象之多态原理与用法案例分析
Dec 30 Python
关于python pycharm中输出的内容不全的解决办法
Jan 10 Python
python 动态绘制爱心的示例
Sep 27 Python
Python如何实现Paramiko的二次封装
Jan 30 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
使用Xdebug调试和优化PHP程序之[1]
2007/04/17 PHP
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
jquery中通过过滤器获取表单元素的实现代码
2011/07/05 Javascript
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
2013/11/06 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
Backbone.js的Hello World程序实例
2015/06/19 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
jQuery拖动布局其结果保存到数据库
2015/10/09 Javascript
AngularJs实现ng1.3+表单验证
2015/12/10 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
JavaScript操作文件_动力节点Java学院整理
2017/06/30 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
2017/11/29 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
js类的继承定义与用法分析
2019/06/21 Javascript
详解JavaScript的this指向和绑定
2020/09/08 Javascript
浅谈Python2、Python3相对路径、绝对路径导入方法
2018/06/22 Python
python远程连接MySQL数据库
2019/04/19 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
python Manager 之dict KeyError问题的解决
2019/12/21 Python
Python实现新型冠状病毒传播模型及预测代码实例
2020/02/05 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
2020/02/20 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
家庭户外服装:Hawkshead
2017/11/02 全球购物
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
2014年监理工作总结范文
2014/11/17 职场文书
大学生操行评语大全
2014/12/31 职场文书
2016大学迎新欢迎词
2015/09/29 职场文书
win10电脑双屏显示一个黑屏怎么办?win10电脑双屏显示一个黑屏解决方法
2022/07/15 数码科技