国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2020-01-04 18:01:20
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了詳解Python的Django框架中inclusion_tag的使用,文中示例基于Python較早的2.x版本,希望能夠注意一下,需要的朋友可以參考下

另外一類常用的模板標簽是通過渲染 其他 模板顯示數據的。 比如說,Django的后臺管理界面,它使用了自定義的模板標簽來顯示新增/編輯表單頁面下部的按鈕。 那些按鈕看起來總是一樣的,但是鏈接卻隨著所編輯的對象的不同而改變。 這就是一個使用小模板很好的例子,這些小模板就是當前對象的詳細信息。

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

 

 
  1. {% books_for_author author %} 

結果將會像下面這樣:

 

 
  1. <ul> 
  2. <li>The Cat In The Hat</li> 
  3. <li>Hop On Pop</li> 
  4. <li>Green Eggs And Ham</li> 
  5. </ul> 

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

 

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

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

 

 
  1. <ul> 
  2. {% for book in books %} 
  3. <li>{{ book.title }}</li> 
  4. {% endfor %} 
  5. </ul> 

最后,我們通過對一個 Library 對象使用 inclusion_tag() 方法來創建并注冊這個包含標簽。

在我們的例子中,如果先前的模板在 polls/result_snippet.html 文件中,那么我們這樣注冊標簽:

 

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

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

 

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

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

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

 

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

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

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

  1. Jump directly to <a href="{{ link }}">{{ title }}</a>. 


然后您想使用自定義標簽時,就可以加載它的庫,然后不帶參數地調用它,就像這樣:

  1. {% jump_link %} 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 芷江| 静海县| 襄汾县| 华坪县| 青河县| 马关县| 扎鲁特旗| 梁山县| 湘潭县| 台山市| 宜都市| 遂溪县| 浑源县| 涪陵区| 岢岚县| 赤城县| 昆明市| 岑巩县| 应用必备| 安化县| 夏邑县| 老河口市| 湄潭县| 车险| 固阳县| 建瓯市| 丰顺县| 马公市| 酒泉市| 鱼台县| 闽侯县| 资阳市| 山阴县| 繁峙县| 临沂市| 巴彦淖尔市| 察哈| 鄢陵县| 隆尧县| 泽库县| 绿春县|