2012-01-03 98 views
2

好了,所以這裏的已經快把我逼瘋了一整天的東西簡化版本:蟒蛇import語句導致NoneType

models.py

from django.template.defaultfilters import slugify 
class MyModel(models.Model): 
    .... 

    def populate_property(self): 
     self.property = slugify('string of text') 

我的看法,然後調用populate_property()但我得到一個NoneType object is not callable錯誤。

但是,如果我添加一個嵌入importslugify那麼它的工作原理。

這是長期工作的代碼,所以我現在虧本了。

PYTHONPATH但它看起來不錯,並使用buildout

任何幫助,將不勝感激創建環境...

回答

1

剛走征服了類似的問題,這聽起來像你有一個循環引用你的代碼(這個文件導入從這個文件導入的東西)。將導入內置到populate_property中並沒有什麼壞處。

+0

爲true表示循環導入是在django.template.defaultfilters的某處引起的,對我來說聽起來有點奇怪......他還說這是在調用方法時發生的,而不是在模塊加載時發生。 – 2012-01-03 20:54:44

+0

實際上,它本質上就是它。謝謝,湯姆。我在使用通配符包括那裏沒有必要,並且殺死了一切。 [我應該知道更好](http://stackoverflow.com/questions/3615125/should-wildcard-import-be-avoided)。 – jamstooks 2012-01-04 15:27:53

0

根據您發佈的代碼,應該沒有問題。我所能想到的唯一可以引起你提到的錯誤的是,你改變了slugify的值。當打算使用==或類似的東西時,最有可能意外使用=

檢查的最佳方法是按原樣保留代碼的其餘部分,但除了現在導入外,還要添加from django.template import defaultfilters。然後,在問題更改特定的代碼行:

def populate_property(self): 
    self.property = defaultfilters.slugify('string of text') 

如果它的工作原理,然後嘗試追查其中slugify得到了重新分配的地方。

+0

謝謝你的建議,克里斯。 'defaultfilters'也是未定義的。事實上,大多數不是內聯的東西都是未定義的。 – jamstooks 2012-01-04 13:17:11

+0

只有Django進口嗎?也許在Django包中出現錯誤 - 重新安裝它可能會有所幫助。如果stdlib導入也發生這種情況,那麼您的整個環境可能會被凍結。你有另一個系統可以測試你的代碼嗎? (或者如果你使用的話,嘗試創建一個新的virtualenv)。 – 2012-01-04 15:11:52

0

如果您使用Django < 1.7,我注意到這幾乎肯定是由於由import signal引起的循環導入。 我總是會遇到一些奇怪的情況,它可能在本地工作,也許在開發服務器上,也可能不在prod服務器上......