gpt4 book ai didi

python - 从模板集命名变量调用 Django 方法。这怎么可能?

转载 作者:行者123 更新时间:2023-12-01 03:58:05 25 4
gpt4 key购买 nike

在 View 中,我从模板中调用方法,如下所示:

{{ stakeholder.get_avg_endorsement|floatformat:1 }}

该方法看起来像这样:

def get_avg_endorsement(self, stakeholder_cache={}):
if stakeholder_cache.has_key(self.id):
print "gae cached:", stakeholder_cache[self.id], stakeholder_cache, locals()
return stakeholder_cache[self.id]
...

我期望该特定调用始终有一个空的利益相关者缓存。然而,有时 get_avg_endorsement 会产生错误的值,然后打印跟踪如下所示:

[Thu May 05 17:31:46 2016] [error] ot----- <- start of the view
[Thu May 05 17:31:47 2016] [error] gae cached: 1.33333333333 {5661L: 1.3333333333333333}
[Thu May 05 17:31:47 2016] [error] gae cached: 1.33333333333 {5661L: 1.3333333333333333}
[Thu May 05 17:31:47 2016] [error] gae cached: 1.33333333333 {5661L: 1.3333333333333333}

如您所见,所有对 get_avg_endorsement 的调用他们的stakeholder_cache中有一些东西。当我从模板中调用它至少一次时,这怎么可能?我用过traceback并且它至少显示了来自模板渲染器的一次调用。

我使用的是旧版本的 Django (1.4.3)。这可能是 Django 中的一个错误吗? get_avg_endorsement也从其他确实使用 stakeholder_cache 的地方调用.

我花了几个小时研究这个问题,但我完全不知道这是如何发生的或如何继续。任何帮助将不胜感激。

最佳答案

您的问题在于函数中的参数。

def get_avg_endorsement(self, stakeholder_cache={})

这会产生问题,因为执行函数时总是会评估默认参数。详情请查看:

Default Parameter Values in Python

这样做:

def get_avg_endorsement(self, stakeholder_cache=None):
if stakeholder_cache is None:
stakeholder_cache ={}

关于python - 从模板集命名变量调用 Django 方法。这怎么可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37100410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com