最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2015年07月21日 09:38:45   投稿:goldensun  
這篇文章主要介紹了詳解Python的Django框架中inclusion_tag的使用,文中示例基于Python較早的2.x版本,希望能夠注意一下,需要的朋友可以參考下

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

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

{% books_for_author author %}

結(jié)果將會像下面這樣:

<ul>
  <li>The Cat In The Hat</li>
  <li>Hop On Pop</li>
  <li>Green Eggs And Ham</li>
</ul>

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

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

接下來,我們創(chuàng)建用于渲染標(biāo)簽輸出的模板。 在我們的例子中,模板很簡單:

<ul>
{% for book in books %}
  <li>{{ book.title }}</li>
{% endfor %}
</ul>

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

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

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

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

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

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

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

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

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

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

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

然后您想使用自定義標(biāo)簽時,就可以加載它的庫,然后不帶參數(shù)地調(diào)用它,就像這樣:

{% jump_link %}

相關(guān)文章

最新評論

大冶市| 合作市| 通辽市| 昌邑市| 和政县| 鲁山县| 湾仔区| 错那县| 舟山市| 杭锦后旗| 阿坝| 育儿| 崇左市| 利川市| 全椒县| 蒙山县| 望江县| 景谷| 敦化市| 呼伦贝尔市| 山阳县| 时尚| 大关县| 宁夏| 黎城县| 鄂州市| 清流县| 宁阳县| 舒兰市| 荔浦县| 成武县| 南皮县| 长武县| 五常市| 嘉鱼县| 五原县| 包头市| 松桃| 桑日县| 东莞市| 南部县|