Django架構中方法的訪問和尋找

來源:互聯網
上載者:User
在 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.year1993>>> d.month5>>> d.day2>>> 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.'
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.