Python random.random () bewirkt, dass „‚Modul‘Objekt nicht aufrufbar ist“, wenn in eigenem Template-Tag [Duplikat] verwendet

StackOverflow https://stackoverflow.com/questions/837916

Frage

    

Diese Frage bereits eine Antwort hier:

         

Wenn ich starte Python von der Kommandozeile und geben Sie:

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

Es druckt mir eine Zufallszahl (Erwartete, ausgezeichnet).

Wenn ich schließe die oben zwei Linien in meiner django Anwendung models.py und starten Sie meine django app mit runserver ich die Ausgabe auf der Kommandozeile bekommen zeigt mir eine Zufallszahl (Great!)

Wenn ich nehme einen benutzerdefinierten Tag, das sonst ganz gut funktioniert, aber ich schließe

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

als die ersten zwei Zeilen des Py-Datei des benutzerdefinierten Tags, bekomme ich einen Fehler, wenn ich versuche, eine Vorlage zu öffnen, die den benutzerdefinierten Tag verwendet:

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

Bitte beachten Sie, dass, wenn ich von diesen beiden Linien loszuwerden, verhält sich mein eigener Tag als sonst zu erwarten und kein Fehler ausgelöst. Leider muss ich einige zufällige Verhalten innerhalb meiner Template-Tag.

Das Problem ist, wenn in einem benutzerdefinierten Tag ich tun:

import random

auf einer benutzerdefinierten Vorlage Tag, es importiert

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

und nicht

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

, wie sie normalerweise von überall sonst importiert

Django Template-Bibliothek hat einen Filter zufällig genannt, und irgendwie ist es Priorität erhalten über das System der Zufalls.

Kann jemand empfehlen, wie explizit den richtigen Python zufällig importieren?

War es hilfreich?

Lösung

Die Antwort ist ... seltsam.

Als ich ursprünglich meinen benutzerdefinierten Tag schrieb, ich nannte es random.py. Mir wurde schnell klar, dass dieser Name nicht gut sein kann und umbenannt es randomchoice.py und gelöscht meine random.py Datei. Python gehalten, um die kompilierte random.pyc Datei um, und es wurde immer geladen, wenn ich import random tat. Ich zog meine random.pyc Datei, und das Problem ging weg.

Andere Tipps

Ja, diese Art von Fehler ist recht einfach. Grundsätzlich benenne keine Ihrer Dateinamen oder alles, was Sie mit den gleichen Namen wie alle wahrscheinlich Python Module, die Sie verwenden möchten erstellen.

Es ist schon eine Weile her, seit ich um mit Django gebastelt, aber wenn random.random ein „Modul“ ist, dann versuchen random.random.random (). Oder vielleicht nur versuchen random (). Sie wissen einfach nicht, welche Art von Hacks geht hinter den Kulissen auf.

Bearbeiten

Versuchen Sie folgendes:

sys.path = [r"C:\Program Files\Python26\lib\"] + sys.path
import random
sys.path.pop(0)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top