2016-05-08 7 views
1

その特定の呼び出しは常に空を持っているため、私は期待する何variableという名前のテンプレートセットからのDjangoメソッド呼び出し。これはどのように可能ですか?</p> <pre><code>{{ stakeholder.get_avg_endorsement|floatformat:1 }} </code></pre> <p>方法は、このようなものになります:私はそうのようなテンプレートからメソッドを呼び出すビューで

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] 
    ... 

ですstakeholder_cache。しかし、時にはget_avg_endorsement誤った値を生成し、印刷トレースは次のようになります。あなたはget_avg_endorsementへの呼び出しのすべてが彼らのstakeholder_cacheで何かを持って見ることができるように

[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} 

。私がテンプレートから少なくとも一度呼び出すと、どうすれば可能ですか? tracebackを使用し、テンプレートレンダラーから少なくとも1つの呼び出しを表示します。

私は古いバージョンのDjango(1.4.3)を使用しています。これはDjangoのバグでしょうか? get_avg_endorsementは、stakeholder_cacheを使用する他の場所からも呼び出されます。

私はこれに数時間を費やしましたが、これがどうやって起こるか、どのように進行するのかを覚えていません。どんな助けでも大歓迎です。

答えて

2

問題は、関数のパラメータにあります。

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 ={} 
+0

はありがとうございました!レースの状態を完全に説明して、アドバイスが問題を修正したようです。 – Rolf

関連する問題

 関連する問題