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来开发Markdown脚本扩展的实例分享
Mar 04 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
Jun 30 Python
python cx_Oracle模块的安装和使用详细介绍
Feb 13 Python
python获取当前目录路径和上级路径的实例
Apr 26 Python
python3 判断列表是一个空列表的方法
May 04 Python
Python smtplib实现发送邮件功能
May 22 Python
python遍历小写英文字母的方法
Jan 02 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
Feb 14 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
Jan 06 Python
Pycharm如何运行.py文件的方法步骤
Mar 03 Python
如何用Python 加密文件
Sep 10 Python
python 实现Harris角点检测算法
Dec 11 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抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
php+xml实现在线英文词典查询的方法
2015/01/23 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
用js生产批量批处理执行命令
2008/07/28 Javascript
Javascript 中介者模式实例
2009/12/16 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
2010/06/23 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
2015/05/07 Javascript
Angular.js回顾ng-app和ng-model使用技巧
2016/04/26 Javascript
用JavaScript和jQuery实现瀑布流
2017/03/19 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
vue2单元测试环境搭建
2018/05/24 Javascript
怎么使用javascript深度拷贝一个数组
2019/06/06 Javascript
vue悬浮可拖拽悬浮按钮的实例代码
2019/08/20 Javascript
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
2019/08/26 Javascript
vue服务端渲染操作简单入门实例分析
2019/08/28 Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
2020/04/13 Javascript
Element PageHeader页头的使用方法
2020/07/26 Javascript
分享Python字符串关键点
2015/12/13 Python
Python Requests 基础入门
2016/04/07 Python
python实现逻辑回归的方法示例
2017/05/02 Python
Python语言实现将图片转化为html页面
2017/12/06 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
基于pytorch的保存和加载模型参数的方法
2019/08/17 Python
初学者学习Python好还是Java好
2020/05/26 Python
Python爬虫爬取有道实现翻译功能
2020/11/27 Python
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
台湾家适得:Homeget
2019/02/11 全球购物
营销专业应届生求职信
2013/11/26 职场文书
毕业生个人的求职信范文
2013/12/03 职场文书
学生爱国演讲稿
2014/01/14 职场文书
《一株紫丁香》教学反思
2014/02/19 职场文书
公务员年度考核个人总结
2015/02/12 职场文书
单身申明具结书
2015/02/26 职场文书
小学体育跳绳课教学反思
2016/02/16 职场文书
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript