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

在Django的通用視圖中處理Context的方法

 更新時(shí)間:2015年07月21日 15:28:29   投稿:goldensun  
這篇文章主要介紹了在Django的通用視圖中處理Context的方法,Django是最具人氣的Python web開(kāi)發(fā)框架,需要的朋友可以參考下

制作友好的模板Context

你也許已經(jīng)注意到范例中的出版商列表模板在變量 object_list 里保存所有的書(shū)籍。這個(gè)方法工作的很好,只是對(duì)編寫(xiě)模板的人不太友好。 他們必須知道這里正在處理的是書(shū)籍。 更好的變量名應(yīng)該是publisher_list,這樣變量所代表的內(nèi)容就顯而易見(jiàn)了。

我們可以很容易地像下面這樣修改 template_object_name 參數(shù)的名稱:

from django.conf.urls.defaults import *
from django.views.generic import list_detail
from mysite.books.models import Publisher

publisher_info = {
  'queryset': Publisher.objects.all(),
  'template_name': 'publisher_list_page.html',
  'template_object_name': 'publisher',
}

urlpatterns = patterns('',
  (r'^publishers/$', list_detail.object_list, publisher_info)
)

在模板中,通用視圖會(huì)通過(guò)在template_object_name后追加一個(gè)_list的方式來(lái)創(chuàng)建一個(gè)表示列表項(xiàng)目的變量名。

使用有用的 template_object_name 總是個(gè)好想法。 你的設(shè)計(jì)模板的合作伙伴會(huì)感謝你的。
添加額外的Context

你常常需要呈現(xiàn)比通用視圖提供的更多的額外信息。 例如,考慮一下在每個(gè)出版商的詳細(xì)頁(yè)面顯示所有其他出版商列表。 object_detail 通用視圖為context提供了出版商信息,但是看起來(lái)沒(méi)有辦法在模板中 獲取 所有 出版商列表。

這是解決方法: 所有的通用視圖都有一個(gè)額外的可選參數(shù) extra_context 。這個(gè)參數(shù)是一個(gè)字典數(shù)據(jù)類型,包含要添加到模板的context中的額外的對(duì)象。 所以要給視圖提供所有出版商的列表,我們就用這樣的info字典:

publisher_info = {
  'queryset': Publisher.objects.all(),
  'template_object_name': 'publisher',
  **'extra_context': {'book_list': Book.objects.all()}**
}

這樣就把一個(gè) {{ book_list }} 變量放到模板的context中。 這個(gè)方法可以用來(lái)傳遞任意數(shù)據(jù) 到通用視圖模板中去,非常方便。 這是非常方便的

不過(guò),這里有一個(gè)很隱蔽的BUG,不知道你發(fā)現(xiàn)了沒(méi)有?

我們現(xiàn)在來(lái)看一下, extra_context 里包含數(shù)據(jù)庫(kù)查詢的問(wèn)題。 因?yàn)樵谶@個(gè)例子中,我們把 Publisher.objects.all() 放在URLconf中,它只會(huì)執(zhí)行一次(當(dāng)URLconf第一次加載的時(shí)候)。 當(dāng)你添加或刪除出版商,你會(huì)發(fā)現(xiàn)在重啟Web服務(wù)器之前,通用視圖不會(huì)反映出這些修改(有關(guān)QuerySet何時(shí)被緩存和賦值的更多信息請(qǐng)參考附錄C中“緩存與查詢集”一節(jié))。

備注

這個(gè)問(wèn)題不適用于通用視圖的 queryset 參數(shù)。 因?yàn)镈jango知道有些特別的 QuerySet 永遠(yuǎn)不能 被緩存,通用視圖在渲染前都做了緩存清除工作。

解決這個(gè)問(wèn)題的辦法是在 extra_context 中用一個(gè)回調(diào)(callback)來(lái)代替使用一個(gè)變量。 任何傳遞給extra_context的可調(diào)用對(duì)象(例如一個(gè)函數(shù))都會(huì)在每次視圖渲染前執(zhí)行(而不是只執(zhí)行一次)。 你可以象這樣定義一個(gè)函數(shù):

**def get_books():**
  **return Book.objects.all()**

publisher_info = {
  'queryset': Publisher.objects.all(),
  'template_object_name': 'publisher',
  'extra_context': **{'book_list': get_books}**
}

或者你可以使用另一個(gè)不是那么清晰但是很簡(jiǎn)短的方法,事實(shí)上 Publisher.objects.all 本身就是可以調(diào)用的:

publisher_info = {
  'queryset': Publisher.objects.all(),
  'template_object_name': 'publisher',
  'extra_context': **{'book_list': Book.objects.all}**
}

注意 Book.objects.all 后面沒(méi)有括號(hào);這表示這是一個(gè)函數(shù)的引用,并沒(méi)有真正調(diào)用它(通用視圖將會(huì)在渲染時(shí)調(diào)用它)。

相關(guān)文章

  • Django權(quán)限機(jī)制實(shí)現(xiàn)代碼詳解

    Django權(quán)限機(jī)制實(shí)現(xiàn)代碼詳解

    這篇文章主要介紹了Django權(quán)限機(jī)制實(shí)現(xiàn)代碼詳解,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 基于python內(nèi)置函數(shù)與匿名函數(shù)詳解

    基于python內(nèi)置函數(shù)與匿名函數(shù)詳解

    下面小編就為大家分享一篇基于python內(nèi)置函數(shù)與匿名函數(shù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Python獲取excel的數(shù)據(jù)并繪制箱型圖和直方圖的方法實(shí)例

    Python獲取excel的數(shù)據(jù)并繪制箱型圖和直方圖的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Python獲取excel的數(shù)據(jù)并繪制箱型圖和直方圖的相關(guān)資料,好的圖表能幫助我們深化數(shù)據(jù)的記憶點(diǎn),文中通過(guò)圖文以及代碼示例將實(shí)現(xiàn)的方法介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • python輕松實(shí)現(xiàn)代碼編碼格式轉(zhuǎn)換

    python輕松實(shí)現(xiàn)代碼編碼格式轉(zhuǎn)換

    由于某些原因,需要將代碼從A機(jī)房遷移到B機(jī)房,這兩個(gè)之間不能互相訪問(wèn),但是歷史原因?qū)е翧機(jī)房的代碼全是utf8編碼的,B機(jī)房要求是GBK編碼,看看這個(gè)怎么解決。雖然很簡(jiǎn)單,但是還是要推薦給大家,需要的小伙伴參考下吧。
    2015-03-03
  • 基于Django ORM、一對(duì)一、一對(duì)多、多對(duì)多的全面講解

    基于Django ORM、一對(duì)一、一對(duì)多、多對(duì)多的全面講解

    今天小編就為大家分享一篇基于Django ORM、一對(duì)一、一對(duì)多、多對(duì)多的全面講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • 用Python寫(xiě)一個(gè)自動(dòng)木馬程序

    用Python寫(xiě)一個(gè)自動(dòng)木馬程序

    這篇文章主要介紹了用Python寫(xiě)一個(gè)自動(dòng)木馬程序的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Pytorch?和?Tensorflow?v1?兼容的環(huán)境搭建方法

    Pytorch?和?Tensorflow?v1?兼容的環(huán)境搭建方法

    這篇文章主要介紹了搭建Pytorch?和?Tensorflow?v1?兼容的環(huán)境,本文是小編經(jīng)過(guò)多次實(shí)踐得到的環(huán)境配置教程,給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11
  • Python中合并列表的5種方法代碼示例

    Python中合并列表的5種方法代碼示例

    在python列表操作中除了排序、刪除、添加、去重外,合并也是經(jīng)常需求的操作,下面這篇文章主要給大家介紹了關(guān)于Python中合并列表的5種方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • 用python實(shí)現(xiàn)詞云效果實(shí)例介紹

    用python實(shí)現(xiàn)詞云效果實(shí)例介紹

    大家好,本篇文章主要講的是用python實(shí)現(xiàn)詞云效果實(shí)例介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 一文帶你了解Python與svg之間的操作

    一文帶你了解Python與svg之間的操作

    svgwrite是一個(gè)?Python?庫(kù),用于生成簡(jiǎn)單的?SVG?圖片。它提供了一組類似于繪圖的?API,使用者可以在?SVG?畫(huà)布上畫(huà)線、矩形、圓等圖形。本文主要介紹了如何利用svgwrite進(jìn)行SVG圖片的操作,需要的可以參考一下
    2023-01-01

最新評(píng)論

尉犁县| 景泰县| 晋中市| 江西省| 兰坪| 邓州市| 武冈市| 河津市| 琼中| 舟曲县| 马龙县| 锦州市| 淮阳县| 元江| 星子县| 沐川县| 阿尔山市| 晋中市| 九江县| 洪雅县| 沙湾县| 和龙市| 雅安市| 新晃| 沁阳市| 江陵县| 田林县| 江口县| 延长县| 剑川县| 南和县| 安国市| 新宾| 沁源县| 中西区| 安新县| 昌黎县| 专栏| 六盘水市| 萨迦县| 伊吾县|