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

作者:goldensun 时间:2022-07-23 16:31:35 

在 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.'

标签:Django,方法
0
投稿

猜你喜欢

  • 一个css与js结合的下拉菜单支持主流浏览器

    2023-07-18 01:28:20
  • PHP 巧用数组降低程序的时间复杂度

    2023-11-15 09:40:02
  • MySql循环插入数据

    2010-10-14 13:50:00
  • php调用快递鸟接口实例代码

    2023-11-17 13:48:49
  • asp如何从数据库中删除废旧的电子信箱地址?

    2009-11-15 20:04:00
  • Oracle数据库编写有效事务指导方针

    2009-03-19 17:41:00
  • Oracle捕获问题SQL解决CPU过渡消耗

    2010-07-21 13:14:00
  • web版Photoshop来了

    2008-04-21 13:39:00
  • django框架如何集成celery进行开发

    2022-09-13 11:18:24
  • 如何实现全文检索?

    2010-05-24 18:24:00
  • PHP的HTTP客户端Guzzle简单使用方法分析

    2023-07-16 05:58:56
  • 设计手机端应用时的一些建议

    2011-05-14 16:45:00
  • python检索特定内容的文本文件实例

    2022-12-29 12:05:42
  • MySQL 数据(字段)类型

    2011-09-10 16:15:56
  • Python os模块中的isfile()和isdir()函数均返回false问题解决方法

    2022-04-16 19:40:58
  • thinkPHP中配置的读取与C方法详解

    2023-11-14 17:12:35
  • np.concatenate()函数的具体使用

    2023-06-21 11:15:19
  • 一段ASP单页显示文件夹下所有图片的代码

    2011-02-28 11:23:00
  • 网页颜色变黑白CSS代码 适合所有类型网站

    2010-04-21 10:37:00
  • 使用python实现微信小程序自动签到功能

    2021-05-30 10:04:11
  • asp之家 网络编程 m.aspxhome.com