Django框架中方法的訪問和查找
在 Django 模板中遍歷復(fù)雜數(shù)據(jù)結(jié)構(gòu)的關(guān)鍵是句點(diǎn)字符 (.)。
最好是用幾個(gè)例子來說明一下。 比如,假設(shè)你要向模板傳遞一個(gè) Python 字典。 要通過字典鍵訪問該字典的值,可使用一個(gè)句點(diǎn):
>>> 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.'
同樣,也可以通過句點(diǎn)來訪問對象的屬性。 比方說, Python 的 datetime.date 對象有 year 、 month 和 day 幾個(gè)屬性,你同樣可以在模板中使用句點(diǎn)來訪問這些屬性:
>>> 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.'
這個(gè)例子使用了一個(gè)自定義的類,演示了通過實(shí)例變量加一點(diǎn)(dots)來訪問它的屬性,這個(gè)方法適用于任意的對象。
>>> 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.'
點(diǎn)語法也可以用來引用對象的* 方法*。 例如,每個(gè) Python 字符串都有 upper() 和 isdigit() 方法,你在模板中可以使用同樣的句點(diǎn)語法來調(diào)用它們:
>>> 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'
注意這里調(diào)用方法時(shí)并* 沒有* 使用圓括號 而且也無法給該方法傳遞參數(shù);你只能調(diào)用不需參數(shù)的方法。 (我們將在本章稍后部分解釋該設(shè)計(jì)觀。)
最后,句點(diǎn)也可用于訪問列表索引,例如:
>>> 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.'
不允許使用負(fù)數(shù)列表索引。 像 {{ items.-1 }} 這樣的模板變量將會(huì)引發(fā)`` TemplateSyntaxError``
Python 列表類型
一點(diǎn)提示: Python的列表是從0開始索引。 第一項(xiàng)的索引是0,第二項(xiàng)的是1,依此類推。
句點(diǎn)查找規(guī)則可概括為: 當(dāng)模板系統(tǒng)在變量名中遇到點(diǎn)時(shí),按照以下順序嘗試進(jìn)行查找:
- 字典類型查找 (比如 foo["bar"] )
- 屬性查找 (比如 foo.bar )
- 方法調(diào)用 (比如 foo.bar() )
- 列表類型索引查找 (比如 foo[bar] )
系統(tǒng)使用找到的第一個(gè)有效類型。 這是一種短路邏輯。
句點(diǎn)查找可以多級深度嵌套。 例如在下面這個(gè)例子中 {{person.name.upper}} 會(huì)轉(zhuǎn)換成字典類型查找( person['name'] ) 然后是方法調(diào)用( 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.'
相關(guān)文章
一文速學(xué)Python+Pyecharts繪制樹形圖
比起matplotlib,pyeacharts的圖表要豐富而且好看,而且pyechart文檔全,便于開發(fā)和閱讀文檔,熟練掌握后是一種非常好用的數(shù)據(jù)可視化的工具之一。本文就來用Pyecharts繪制樹形圖,快跟隨小編一起學(xué)習(xí)一下吧2023-02-02
解決plt.savefig()保存到本地的圖片上下左右會(huì)有白邊
這篇文章主要介紹了解決plt.savefig()保存到本地的圖片上下左右會(huì)有白邊的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
pyinstaller將含有多個(gè)py文件的python程序做成exe
這篇文章主要介紹了pyinstaller將含有多個(gè)py文件的python程序做成exe,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
在Python中處理字符串之isdecimal()方法的使用
這篇文章主要介紹了在Python中處理字符串之isdecimal()方法的使用,是Python入門學(xué)習(xí)的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05
pandas.DataFrame 根據(jù)條件新建列并賦值的方法
下面小編就為大家分享一篇pandas.DataFrame 根據(jù)條件新建列并賦值的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
python常量折疊基礎(chǔ)知識(shí)點(diǎn)講解
在本篇文章里小編給大家整理的是一篇關(guān)于python常量折疊基礎(chǔ)知識(shí)點(diǎn)講解,對此有興趣的朋友可以跟著學(xué)習(xí)下。2021-02-02
python GUI庫圖形界面開發(fā)之PyQt5復(fù)選框控件QCheckBox詳細(xì)使用方法與實(shí)例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5復(fù)選框控件QCheckBox詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下2020-02-02

