問題是,在某些視圖中,我手動獲取感興趣的上下文變量(讓我們說「G」),因爲我用它來查找該特定視圖中的其他信息(即視圖A,B,C),但是其他視圖(即X,Y,Z),我需要獲取特定的上下文變量,因爲此上下文將在我的項目中的每個視圖中可用(因爲我的基本模板使用上下文變量)。使用自定義上下文處理器的問題在於,我相信它會在視圖(A,B,C)中進行額外的IDENTICAL DB調用,因爲這些視圖已獲取該上下文變量,因爲需要在視圖中獲取其他數據。我在想的可能是我可以實現一個上下文處理器來檢查給定的請求是否設置了特定的上下文變量。這可能嗎?有更簡單的解決方案嗎?下面的代碼可能會爲有些人澄清這個問題。是否可以檢查一個上下文變量是否已經在自定義上下文處理器定義的視圖中設置?
謝謝你的任何建議!
def viewA(request):
g=G.objects.get(user=request.user)
posts = Post.objects.filter(g=g)
return direct_to_template(request,'something.html',{'G':g, 'posts':posts})
def viewX(request):
stuff = Albums.objects.get(user=request.user)
return direct_to_template(request,'something2.html',{'stuff':stuff})
def my_context_processor(request): #redundant in case of viewA (hits db again?)
return {'G':G.objects.get(user=request.user)}
def ideal_processor(request):
#check context vars to see if G is already in there
#if it is, return {}, else, return {'G':G.objects.get(user=request.user)}
「使用自定義上下文處理器的問題是,我相信它會進行額外的和相同的數據庫調用」?爲什麼? Django有一個緩存管理器。你有沒有檢查你的數據庫日誌,看看是否屬實? – 2011-05-13 19:24:54