2009-05-08 3 views
7

で使用する場合、「『モジュール』オブジェクトは呼び出し可能ではありません」原因:Pythonのはrandom.Random()私は、コマンドラインおよびタイプからのpythonを起動する場合は、カスタムテンプレートタグ

import random 
print "Random: " + str(random.random()) 

それは乱数(私を印刷します期待、優秀)。

私は私のDjangoアプリケーションのmodels.pyで上記の2行を含めると、私は私の乱数を示すコマンドラインで出力を得る(グレートを!)のrunserverと私のDjangoのアプリを起動私が取る場合

場合私はそのカスタムタグを使用したテンプレートを開くしようとしたときにそれ以外の場合は完全に正常に動作しますが、私は、カスタムタグのの.pyファイルの最初の2行として

import random 
print "Random: " + str(random.random()) 

を含めるカスタムタグは、私はエラーを取得します:

TypeError at /help/ 
'module' object is not callable 

これらの2行を取り除くと、私のカスタムタグは期待したように動作し、エラーはスローされないことに注意してください。残念ながら、私はテンプレートタグ内でランダムな動作が必要です。

私はカスタムタグであれば、問題がある:カスタムテンプレートタグの

import random 

、それが正常にインポートされるよう

<module 'django.templatetags.random' from '[snip path]'> 

なく

<module 'random' from 'C:\\Program Files\\Python26\\lib\\random.pyc'> 

をインポートどこからでも

Djangoテンプレートライブラリにはrandomと呼ばれるフィルタがあり、システムのランダムよりも優先されています。

誰も明示的に正しいpythonをインポートする方法をお勧めできますか?

+0

try: 'from random import random' – jfs

答えて

14

答えは...奇妙な。

私が最初にカスタムタグを書いたとき、私はそれをrandom.pyと呼んだ。私はすぐにこの名前が良くないかもしれないと気づき、それをrandomchoice.pyと変更し、私のrandom.pyファイルを削除しました。 Pythonはコンパイル済みのrandom.pycファイルを保持していました。いつでも、私はimport randomを実行したときにロードされていました。 random.pycファイルを削除したところ、問題は解決しました。

2

私はDjangoに触れてからしばらくしていましたが、random.randomが "module"であれば、random.random.random()を試してみてください。またはrandom()を試してみてください。あなたはちょうどシーンの裏側でどのような種類のハッキリが起こっているのか分かりません。

編集

はこれを試してみてください:

sys.path = [r"C:\Program Files\Python26\lib\"] + sys.path 
import random 
sys.path.pop(0) 
+0

洞察に感謝します。私はそれをすべて試してみました。次に、インポートする正確なモジュールを印刷しようとしました。これは、私がメインポストに含まれている問題の重要な洞察を加えたものです。 –

5

はい、この種のエラーはかなり簡単です。基本的には、ファイル名や作成する名前を、使用する可能性が高い他のPythonモジュールと同じ名前で名前付けしないでください。

関連する問題