• 用点号进行深度变量的查找

    Django中句点号的作用
    服务器君一共花费 8.346 ms 进行了 2 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    在到目前为止的例子中,我们通过 context 传递的简单参数值主要是字符串,还有一个 datetime.date 范例。 然而,模板系统能够非常简洁地处理更加复杂的数据结构,例如list、dictionary和自定义的对象。

    在 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”

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [运维管理] 路由器与交换机 4 个条目
  2. [移动开发] 从代码角度去认识HttpClient 2 个条目
  3. [移动开发] Android抽屉导航NavigationDrawer 5 个条目
  4. [PHP程序设计] PHP中的Hash算法 3 个条目
  5. [C语言程序设计] 结构体基本知识 1 个条目
  6. [移动开发] Android SQLite增删查改实例(数据:魔弹之王) 2 个条目
  7. [Python程序设计] Django数据库模型 6 个条目
  8. [移动开发] 简单了解Android Fragment 3 个条目
  9. [Python程序设计] Django模板系统 11 个条目
  10. [Python程序设计] urls.py设置技巧 8 个条目
  11. [计算机算法] 从双端队列引出的卡特兰数 3 个条目
  12. [移动开发] Android根基概念Context 8 个条目
窗口 -- [协会]