今天扣丁学堂Python开发给大家主要介绍了Django框架中方法的访问和查找,包括各种列表和字典的查找,是Python的Django框架使用的必备技巧,在Django模板中遍历复杂数据结构的关键是句点字符(.)。比如假设你要向模板传递一个Python字典。要通过字典键访问该字典的值,可使用一个句点,下面我们一起来看一下吧。

>>>fromdjango.templateimportTemplate,Context
>>>person={'name':'Sally','age':'43'}
>>>t=Template('{{person.name}}is{{person.age}}yearsold.')
>>>c=Context({'person':person})
>>>t.render(c)
u'Sallyis43yearsold.'
同样,也可以通过句点来访问对象的属性。比方说,Python的datetime.date对象有year、month和day几个属性,你同样可以在模板中使用句点来访问这些属性:
>>>fromdjango.templateimportTemplate,Context
>>>importdatetime
>>>d=datetime.date(1993,5,2)
>>>d.year
1993
>>>d.month
5
>>>d.day
2
>>>t=Template('Themonthis{{date.month}}andtheyearis{{date.year}}.')
>>>c=Context({'date':d})
>>>t.render(c)
u'Themonthis5andtheyearis1993.'
这个例子使用了一个自定义的类,演示了通过实例变量加一点(dots)来访问它的属性,这个方法适用于任意的对象。
>>>fromdjango.templateimportTemplate,Context
>>>classPerson(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,JohnSmith.'
点语法也可以用来引用对象的*方法*。例如,每个Python字符串都有upper()和isdigit()方法,你在模板中可以使用同样的句点语法来调用它们:
>>>fromdjango.templateimportTemplate,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'
注意这里调用方法时并*没有*使用圆括号而且也无法给该方法传递参数;你只能调用不需参数的方法。(我们将在本章稍后部分解释该设计观。)
最后,句点也可用于访问列表索引,例如:
>>>fromdjango.templateimportTemplate,Context
>>>t=Template('Item2is{{items.2}}.')
>>>c=Context({'items':['apples','bananas','carrots']})
>>>t.render(c)
u'Item2iscarrots.'
不允许使用负数列表索引。像{{items.-1}}这样的模板变量将会引发``TemplateSyntaxError``
Python列表类型
一点提示:Python的列表是从0开始索引。第一项的索引是0,第二项的是1,依此类推。
句点查找规则可概括为:当模板系统在变量名中遇到点时,按照以下顺序尝试进行查找:
字典类型查找(比如foo["bar"])
属性查找(比如foo.bar)
方法调用(比如foo.bar())
列表类型索引查找(比如foo[bar])
系统使用找到的第一个有效类型。这是一种短路逻辑。
句点查找可以多级深度嵌套。例如在下面这个例子中{{person.name.upper}}会转换成字典类型查找(person['name'])然后是方法调用(upper()):
>>>fromdjango.templateimportTemplate,Context
>>>person={'name':'Sally','age':'43'}
>>>t=Template('{{person.name.upper}}is{{person.age}}yearsold.')
>>>c=Context({'person':person})
>>>t.render(c)
u'SALLYis43yearsold.'
以上就是关于扣丁学堂Python高级教程Django框架中方法访问和查找详解介绍,请多多关注扣丁学堂。
网友评论