2011-02-12 12 views
6

Al tratar de usar django-grappelli para mi tema de administrador, la instalación ha sido sorprendentemente desafiante. Corriendo a la siguiente en mi urls.py:Django NameError [nombre de la aplicación] no está definido

NameError .. name 'grappelli' is not defined 

El error se lanza en la línea

(r'^grappelli/', include(grappelli.urls)) 

Grappelli instalados con la pipa, y Grappelli está en mi directorio sites-paquetes. Agregado a mi INSTALLED_APPS, corrí syncdb, intenté agregar grappelli a mi ruta de acceso de pitón, pero no tuve suerte. Si importo grappelli en urls.py el error cambia a AttributeError - 'module' has no attribute 'urls'

Sugerencias o cualquier tipo de ayuda es muy apreciada.

Respuesta

17

línea debe decir:

(r'^grappelli/', include('grappelli.urls')) 

include bien toma un camino a un módulo de URLs o puede ser un objeto de Python que devuelve los patrones de URL http://docs.djangoproject.com/en/dev/topics/http/urls/#include

Así que sus dos opciones son la línea arriba (ruta a las URL) o

from grappelli.urls import urlpatterns as grappelli_urls 

(r'^grappelli/', include(grappelli_urls)), 

En cuanto al error, es uno de los errores más directos ors en Python para depurar: grappelli no está definido, como en .. no se ha definido.

Imagínese estar en la cáscara:

>>> print grappelli 
exception: variable undefined 
>>> grappelli = 'hello' # we just defined grappelli 
>>> print grappelli 
'hello' 
+0

Gracias @Yuji - No puedo creer que no lo intenté eso. Parecía que debería ser obvio, pero me tropecé cuando importé Grappelli no me dio ningún problema. Estaba asumiendo que agregar grappelli a mi installed_apps me dio acceso a ese objeto como variable. Lo aceptaré tan pronto como me lo permita. – jonathanatx

+0

NP! Noté que los documentos grappelli sugieren que 'include (grappelli.urls)' :) está mal. –

+0

Es importante señalar que las citas de 'grappelli.urls' es lo que soluciona este problema ... por el motivo que sea. – tufelkinder

10

Comprendo que esto es más de un año de edad, pero fue uno de los primeros resultados de Google cuando estaba teniendo el mismo problema.

en lugar de importar urlpatterns de grapelli.urls, también puede cambiar el include() Declaración

(r'^grappelli/', include(grappelli.urls)) 

a

(r'^grappelli/', include('grappelli.urls')) 

Esto me confundió un poco, así hasta que me di cuenta de la necesidad de citar el paquete.urls en la declaración de inclusión.

1

Es posible que desee importar lo siguiente en urls.py:

from django.conf.urls import include 
1

Al declarar sus rutas, que se olvidó de citar una expresión.

¡Reemplace grappelli.urls por 'grappelli.urls' para que funcione!

La sintaxis correcta sería entonces:

(r'^grappelli/', include('grappelli.urls')) 
Cuestiones relacionadas