我对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