欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

制作友好的模板Context

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

我們可以很容易地像下面這樣修改 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)
)

在模板中,通用視圖會通過在template_object_name后追加一個_list的方式來創(chuàng)建一個表示列表項目的變量名。

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

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

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

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

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

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

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

備注

這個問題不適用于通用視圖的 queryset 參數(shù)。 因為Django知道有些特別的 QuerySet 永遠不能 被緩存,通用視圖在渲染前都做了緩存清除工作。

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

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

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

或者你可以使用另一個不是那么清晰但是很簡短的方法,事實上 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 后面沒有括號;這表示這是一個函數(shù)的引用,并沒有真正調(diào)用它(通用視圖將會在渲染時調(diào)用它)。

相關(guān)文章

  • Matplotlib之解決plt.savefig()保存多張圖片有重疊的問題

    Matplotlib之解決plt.savefig()保存多張圖片有重疊的問題

    這篇文章主要介紹了Matplotlib之解決plt.savefig()保存多張圖片有重疊的問題,具有很好的參考價值,希望對大家有所幫助,
    2023-09-09
  • pandas計數(shù) value_counts()的使用

    pandas計數(shù) value_counts()的使用

    這篇文章主要介紹了pandas計數(shù) value_counts()的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • uwsgi+nginx部署Django項目操作示例

    uwsgi+nginx部署Django項目操作示例

    這篇文章主要介紹了uwsgi+nginx部署Django項目操作,結(jié)合實例形式簡單介紹了uwsgi的概念、原理、安裝、項目創(chuàng)建、配置、調(diào)試運行等相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • 微信跳一跳python輔助腳本(總結(jié))

    微信跳一跳python輔助腳本(總結(jié))

    本篇文章為大家整理了關(guān)于微信跳一跳的輔助腳本內(nèi)容,這次我們給大家整理的是關(guān)于python的腳本內(nèi)容,一起來學(xué)習(xí)下。
    2018-01-01
  • python字符串定義的三種方式

    python字符串定義的三種方式

    在Python中,字符串是一個非常重要的數(shù)據(jù)類型,可用來存儲和操作文本數(shù)據(jù),本文主要介紹了python字符串定義的三種方式,具有一定的參考價值,感興趣的可以了解一下
    2023-05-05
  • 在keras中實現(xiàn)查看其訓(xùn)練loss值

    在keras中實現(xiàn)查看其訓(xùn)練loss值

    這篇文章主要介紹了在keras中實現(xiàn)查看其訓(xùn)練loss值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python 鍵盤事件詳解

    Python 鍵盤事件詳解

    這篇文章主要為大家詳細介紹了Python的 鍵盤事件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 基于python的selenium全網(wǎng)最新超詳細教程

    基于python的selenium全網(wǎng)最新超詳細教程

    這篇文章主要介紹了基于python的selenium全網(wǎng)最新超詳細教程,本文內(nèi)容比較長,結(jié)合實例代碼給大家講解的非常詳細,需要的朋友可以參考下
    2023-12-12
  • Python日志無延遲實時寫入的示例

    Python日志無延遲實時寫入的示例

    今天小編就為大家分享一篇Python日志無延遲實時寫入的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python 使用list和tuple+條件判斷詳解

    Python 使用list和tuple+條件判斷詳解

    這篇文章主要介紹了Python 使用list和tuple+條件判斷詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07

最新評論