2009-05-08 21 views
7

komut satırından ve türünden piton başlatırsanız özel şablon etiketinde kullanıldığında " 'modülü' nesne çağrılabilir değil" neden Beklenen, mükemmel).piton random.random()

benim Django uygulamanın models.py yukarıda iki satırdan oluşan ve bana bir rastgele sayı gösteren komut satırında çıktı almak (Mükemmel!) Runserver ile benim django uygulaması başlatmak ben alırsam

ise aksi mükemmel çalışıyor, ama ben özel etiket kullanan bir şablon açmaya her

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

özel etiketin .py dosyası ilk 2 çizgiler olarak, bir hata alıyorum dahil bir özel etiket:

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

Lütfen bu iki satırdan kurtulursam, özel etiketimin beklenildiği gibi davranacağını ve hiçbir hata atılmayacağını unutmayın. Maalesef şablon etiketimin içinde rastgele bir davranışa ihtiyacım var. genelde aktarılmış gibi

bir özel şablon etiketi üzerinde
import random 

, bu

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

değil

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

ithal:

sorun, özel bir etiketi bunu yaparsam olduğunu her yerden

Django şablon kütüphanesi rasgele olarak adlandırılan bir filtreye sahiptir ve bir şekilde sistemin rasgele üstünde öncelikli hale gelmektedir.

Uygun python'u rasgele nasıl açıkça içe aktarmayı önerebilir?

+0

try: 'rastgele içe aktarma rasgele ' – jfs

cevap

14

cevaptır ... garip.

Özel etiketimi ilk yazdığımda, onu random.py olarak adlandırdım. Bu adın iyi olmayacağını ve randomchoice.py yeniden adlandırıldığını ve random.py dosyamı sildim. Python derlenmiş random.pyc dosyasını tuttu ve import random'u ne zaman yaptım yükleniyordu. Random.pyc dosyasını kaldırdım ve sorun gitti.

2

Django ile etrafta dolaştığımdan beri biraz zaman geçti, ancak random.random bir "modül" ise, random.random.random() öğesini deneyin. Ya da sadece rastgele deneyin(). Sahnelerin arkasında nasıl bir korsanlık olduğunu bilmiyorsunuz.

Düzenleme

bu deneyin:

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

İçgörü için teşekkürler.Tüm bunları denedim ve sonra hangi tam modülün içe aktarıldığını yazdırmaya çalıştım. Bu, ana yayına dahil ettiğim soruna önemli bilgiler ekledi. –

5

Evet, bu tür bir hata oldukça kolaydır. Temel olarak, kullanacağınız olası python modülleriyle aynı isimlerle oluşturduğunuz dosya adlarınızı veya herhangi bir adınızı belirtmeyin.