2009-05-08 17 views
7

si comienzo Python desde la línea de comandos y escribir:random.random pitón() hace que " 'módulo' objeto no es exigible" cuando se utiliza en la etiqueta nueva plantilla

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

Me imprime un número aleatorio (Esperado, excelente).

Si incluyo los anteriores y dos líneas en models.py de mi aplicación Django y comienzo mi aplicación Django con la ejecución del servidor consigo la salida de la línea de comandos que me muestra un número aleatorio (genial!)

Si tomo una etiqueta personalizada, que funciona perfectamente bien lo contrario, pero incluyo

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

como las 2 primeras líneas del archivo .py de la etiqueta personalizada, me sale un error cada vez que intento abrir una plantilla que utiliza esa etiqueta personalizada:

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

Tenga en cuenta que si elimino estas dos líneas, mi etiqueta personalizada se comportará como se espera y no se generará ningún error. Desafortunadamente, necesito un comportamiento aleatorio dentro de mi etiqueta de plantilla.

El problema es que si en una etiqueta personalizada que hago:

import random 

en una etiqueta de plantilla personalizada, importa

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

y no

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

ya que normalmente se importa de todos lados

La biblioteca de plantillas de Django tiene un filtro llamado aleatorio, y de alguna manera tiene prioridad sobre el sistema al azar.

¿Alguien puede recomendar cómo importar explícitamente el python adecuado al azar?

+0

prueba: 'de la importación aleatoria al azar' – jfs

Respuesta

14

La respuesta es ... extraño.

Cuando originalmente escribí mi etiqueta personalizada, la llamé random.py. Rápidamente me di cuenta de que este nombre podría no ser bueno y lo renombré randomchoice.py y borré mi archivo random.py. Python mantuvo el archivo compilado random.pyc, y se cargó cada vez que lo hice import random. Eliminé mi archivo random.pyc y el problema desapareció.

2

Ha pasado un tiempo desde que jugueteé con Django, pero si random.random es un "módulo", entonces prueba random.random.random(). O tal vez solo intente al azar(). Simplemente no sabes qué tipo de piratería se produce detrás de las escenas.

Editar

Prueba esto:

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

Gracias por la comprensión.Intenté todo eso, y luego traté de imprimir qué módulo exacto está importando. Esto agregó información importante sobre el problema, que incluí en la publicación principal. –

5

Sí, este tipo de error es bastante fácil. Básicamente, no nombre ninguno de sus nombres de archivo o cualquier cosa que cree con los mismos nombres que los posibles módulos de Python que va a utilizar.

Cuestiones relacionadas