python random.random()导致在自定义模板标记中使用"'模块'对象不可调用"

Kry*_*ski 8 python random django templatetags

如果我从命令行启动python并输入:

import random
print "Random: " + str(random.random())
Run Code Online (Sandbox Code Playgroud)

它打印出一个随机数(预期,优秀).

如果我在我的django应用程序的models.py中包含上面两行,并使用runserver启动我的django应用程序,我在命令行上输出显示一个随机数(太棒了!)

如果我采用自定义标签,否则完全正常,但我包括

import random
print "Random: " + str(random.random())
Run Code Online (Sandbox Code Playgroud)

作为自定义标记的.py文件的前两行,每当我尝试打开使用该自定义标记的模板时,我都会收到错误:

TypeError at /help/
'module' object is not callable
Run Code Online (Sandbox Code Playgroud)

请记住,如果我摆脱这两行,我的自定义标记的行为与预期的一样,并且不会抛出任何错误.不幸的是,我需要在模板标签内部进行一些随机行为.

问题是如果在自定义标签中我做:

import random
Run Code Online (Sandbox Code Playgroud)

在自定义模板标签上,它导入

<module 'django.templatetags.random' from '[snip path]'> 
Run Code Online (Sandbox Code Playgroud)

并不是

<module 'random' from 'C:\\Program Files\\Python26\\lib\\random.pyc'>
Run Code Online (Sandbox Code Playgroud)

通常从其他地方进口

Django模板库有一个名为random的过滤器,不知怎样,它优先于系统的随机性.

任何人都可以推荐如何显式导入适当的python随机?

Kry*_*ski 15

答案是......很奇怪.

当我最初编写自定义标记时,我调用了它random.py.我很快意识到这个名字可能不太好,并重命名randomchoice.py并删除了我的random.py文件.Python保留了编译后的random.pyc文件,每当我这样做时它就会被加载import random.我删除了random.pyc文件,问题就消失了.


小智 5

是的,这种错误非常简单.基本上不要将您创建的任何文件名或任何名称命名为与将要使用的任何可能的python模块相同的名称.