python random.random()导致';模块';对象不可调用";在自定义模板标记中使用时
如果从命令行启动python并键入:python random.random()导致';模块';对象不可调用";在自定义模板标记中使用时,python,django,random,templatetags,Python,Django,Random,Templatetags,如果从命令行启动python并键入: import random print "Random: " + str(random.random()) 它给我打印了一个随机数(预期,非常好) 如果我在django应用程序的models.py中包含上述两行,并使用runserver启动django应用程序,我将在命令行上获得输出,显示一个随机数(太好了!) 如果我使用一个定制标签,它在其他方面工作得很好,但是我包括 import random print "Random: " + str(random
import random
print "Random: " + str(random.random())
它给我打印了一个随机数(预期,非常好)
如果我在django应用程序的models.py中包含上述两行,并使用runserver启动django应用程序,我将在命令行上获得输出,显示一个随机数(太好了!)
如果我使用一个定制标签,它在其他方面工作得很好,但是我包括
import random
print "Random: " + str(random.random())
作为自定义标记的.py文件的前两行,每当我尝试打开使用该自定义标记的模板时,都会出现错误:
TypeError at /help/
'module' object is not callable
请记住,如果我去掉这两行,我的自定义标记的行为与预期的一样,不会抛出任何错误。不幸的是,我需要一些随机行为在我的模板标签
问题在于,如果在自定义标记中,我执行以下操作:
import random
在自定义模板标记上,它导入
<module 'django.templatetags.random' from '[snip path]'>
而不是
<module 'random' from 'C:\\Program Files\\Python26\\lib\\random.pyc'>
通常是从其他地方进口的
Django模板库有一个名为random的过滤器,不知何故,它的优先级高于系统的random
有人能推荐如何显式导入正确的python random吗?我已经有一段时间没有修改Django了,但是如果random.random是一个“模块”,那么请尝试random.random.random()。或者试试random()。你只是不知道幕后会发生什么样的黑客行为 编辑 试试这个:
sys.path = [r"C:\Program Files\Python26\lib\"] + sys.path
import random
sys.path.pop(0)
答案是。。。奇怪
最初编写自定义标记时,我将其命名为
random.py
。我很快意识到这个名字可能不好,于是将它重命名为randomchoice.py
,并删除了我的random.py
文件。Python保存了编译的random.pyc
文件,每当我导入random时,它都会被加载。我删除了random.pyc文件,问题就解决了。是的,这种错误很容易发生。基本上,不要将任何文件名或创建的任何东西命名为与您将要使用的任何可能的python模块相同的名称 尝试:from random import random
为我提供以下已工作的import numpy.random as randMe
感谢您的帮助。我尝试了所有这些,然后我尝试打印出它正在导入的确切模块。这增加了对这个问题的重要洞察,我将其包含在主要帖子中。