我對django並不熟悉,所以你的里程可能會有所不同。通常,您可以覆蓋對象的__setitem__
方法來捕獲項目分配。但是,這不適用於字典,只適用於用戶創建的類,因此首先取決於這個對象是什麼。
正如我從Django文檔短期看獲得,這的確不是一個普通字典,所以你可以嘗試這樣的事:
def log_setitem(obj):
class Logged(obj.__class__):
def __setitem__(self, item, val):
print "setting", item, "to", val, "on", self
super(Logged, self).__setitem__(item, val)
obj.__class__ = Logged
d = {}
try:
log_setitem(d) # throws an error
except:
print "doesn't work"
class Dict2(dict):
pass
d2 = Dict2()
log_setitem(d2) # this works
d2["hello"] = "world" # prints the log message before assigning
即使這個工作,它當然只能當實際上通過「標準」方式進行分配,即在代碼中的某個地方有一個像context['request'] = "something"
那樣的呼叫。
可能值得一試,但我不能向你承諾任何事情。
明顯的解決方案是重載賦值操作(變量=值)。然而,我認爲它不可能超載分配:( – Kimvais 2009-12-29 15:01:05
你不能修改請求對象,看看你的urls.py,看看爲什麼你的視圖函數被調用。「除了會話的所有屬性應該被認爲是隻讀的「你正在做錯誤的事情來調試你的問題 – 2009-12-29 15:23:30
另外....關閉這個問題並詢問你的*真實問題 – 2009-12-29 15:24:33