Python导入语句返回NoneType

2 投票
3 回答
710 浏览
提问于 2025-04-17 09:28

好的,下面是让我今天头疼不已的事情的简化版:

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

但是,如果我在代码里直接添加一个 import 来引入 slugify,那就能正常工作了。

这段代码之前一直能正常运行,所以我现在真的不知道该怎么办。

我的 PYTHONPATH 看起来没问题,环境是用 buildout 创建的。

任何帮助都非常感谢...

3 个回答

0

如果你在使用Django版本低于1.7,我发现这很可能是因为出现了循环导入的问题,这通常是因为你用了import signal。我总是遇到一些奇怪的情况,比如在本地能正常工作,可能在开发服务器上也能用,但在生产服务器上就不行了……

0

根据你发的代码,应该没有问题。我能想到的唯一可能导致你提到的错误的原因,就是在某个时刻你改变了 slugify 的值。这很可能是你在想用 == 时不小心用了 =,或者类似的情况。

检查的最好方法是,保持你其他代码不变,除了现在的导入外,再加上 from django.template import defaultfilters。然后,把你关注的那行代码改成:

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

如果这样能正常工作,那就试着找找看 slugify 是在哪个地方被重新赋值的。

1

刚刚解决了一个类似的问题,听起来你的代码里有个循环引用(这个文件引入了某个东西,而那个东西又引入了这个文件)。把引入放在populate_property里面是没问题的。

撰写回答