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

首頁(yè) > 編程 > Python > 正文

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

2019-11-25 17:09:29
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

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

{% books_for_author author %}

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

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

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

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

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

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

最后,我們通過(guò)對(duì)一個(gè) Library 對(duì)象使用 inclusion_tag() 方法來(lái)創(chuàng)建并注冊(cè)這個(gè)包含標(biāo)簽。

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

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

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

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

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

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

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

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

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

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

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

{% jump_link %}

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 井陉县| 新邵县| 柯坪县| 南陵县| 永平县| 汕尾市| 星子县| 汤原县| 通许县| 永泰县| 丽江市| 温州市| 英吉沙县| 泗水县| 黎平县| 上饶市| 成安县| 深泽县| 马边| 洛川县| 岳池县| 乳山市| 乌兰察布市| 丰县| 西吉县| 黄石市| 西华县| 封开县| 正阳县| 阜康市| 邵阳市| 盐城市| 隆子县| 万盛区| 武义县| 洪泽县| 北安市| 桐梓县| 太白县| 胶州市| 库尔勒市|