2010-06-24 34 views
0

顯然我的一些黑暗魔法的受害者...Django的模板不渲染變量的方法

這裏是我渲染一個模板:

context = Context({'my_cube': c}) 
template = Template(
    '{% load cube_templatetags %}' 
    '{{ my_cube|inspect }} {{ my_cube.measure }}' 
) 

這裏是inspect濾波器的實現:

def inspect_object(obj): 
    return obj.measure() 

下面是渲染給我:

>>> template.render(context) 
u'6 None' 

有誰知道爲什麼地獄{{my_cube.measure}}不能正確渲染,而顯然函數調用成功?

注意:測量函數沒有魔法,沒有內部狀態改變,我測試過,並且每次都給出相同的結果,我還測試了將{{cube.measure}}之前的檢查。不會改變任何東西。我完全不知道發生了什麼......

編輯: 我知道它似乎來自哪裏。但它仍然很奇怪。出於某種原因,我的對象的屬性不能通過template.Variable解決:

>>> Variable('measure').resolve(c) == None 
True 
>>> Variable('testitesti').resolve(c) == None 
True 
>>> c.testitesti() 
68 
#implementation of testitesti : 
def testitesti(self): 
    return 68 

回答

2

呃...我發現了該死的東西!

我試圖渲染的對象有一個__getitem__方法,它只是空的,所以在這個對象上進行了字典索引(沒有拋出任何錯誤),所以當然函數調用沒有做!

0

Inspect正在註冊爲過濾器,是嗎?我假設整個模板都會窒息。有沒有可能的保留字衝突?畢竟,inspect是一個很好的詞彙。你有沒有嘗試將該過濾器重命名爲其他內容?

+0

實際上,這個'檢查'過濾器只是我寫的一個調試過濾器,在我觀察到這個錯誤之前......另外,這將是一個奇怪的巧合,有一個名稱的衝突,但.... tadaaaa :我仍然獲得預期的價值!但我嘗試... – sebpiq 2010-06-24 13:17:15

+0

是的...如果我打電話過濾器'my_super_unique_inspect'同樣的事情! – sebpiq 2010-06-24 13:19:40