詳解Python的Django架構中inclusion_tag的使用

來源:互聯網
上載者:User
另外一類常用的模板標籤是通過渲染 其他 模板顯示資料的。 比如說,Django的後台管理介面,它使用了自訂的模板標籤來顯示新增/編輯表單頁面下部的按鈕。 那些按鈕看起來總是一樣的,但是連結卻隨著所編輯的對象的不同而改變。 這就是一個使用小模板很好的例子,這些小模板就是當前對象的詳細資料。

這些排序標籤被稱為 包含標籤 。如何寫包含標籤最好通過舉例來說明。 讓我們來寫一個能夠產生指定作者對象的書籍清單的標籤。 我們將這樣利用標籤:

{% books_for_author author %}

結果將會像下面這樣:

 
  • The Cat In The Hat
  • Hop On Pop
  • Green Eggs And Ham

首先,我們定義一個函數,通過給定的參數產生一個字典形式的結果。 需要注意的是,我們只需要返回字典類型的結果就行了,不需要返回更複雜的東西。 這將被用來作為模板片段的內容:

def books_for_author(author):  books = Book.objects.filter(authors__id=author.id)  return {'books': books}

接下來,我們建立用於渲染標籤輸出的模板。 在我們的例子中,模板很簡單:

 
    {% for book in books %}
  • {{ book.title }}
  • {% endfor %}

最後,我們通過對一個 Library 對象使用 inclusion_tag() 方法來建立並註冊這個包含標籤。

在我們的例子中,如果先前的模板在 polls/result_snippet.html 檔案中,那麼我們這樣註冊標籤:

register.inclusion_tag('book_snippet.html')(books_for_author)

Python 2.4裝飾器文法也能正常工作,所以我們可以這樣寫:

@register.inclusion_tag('book_snippet.html')def books_for_author(author):  # ...

有時候,你的包含標籤需要訪問父模板的context。 為瞭解決這個問題,Django為包含標籤提供了一個 takes_context 選項。 如果你在建立模板標籤時,指明了這個選項,這個標籤就不需要參數,並且下面的Python函數會帶一個參數: 就是當這個標籤被調用時的模板context。

例如,你正在寫一個包含標籤,該標籤包含有指向首頁的 home_link 和 home_title 變數。 Python函數會像這樣:

@register.inclusion_tag('link.html', takes_context=True)def jump_link(context):  return {    'link': context['home_link'],    'title': context['home_title'],  }

(注意函數的第一個參數 必須 是 context 。)

模板 link.html 可能包含下面的東西:

Jump directly to {{ title }}.

然後您想使用自訂標籤時,就可以載入它的庫,然後不帶參數地調用它,就像這樣:

{% jump_link %}
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.