/ / Django NameError [nome do aplicativo] não está definido - python, django, django-grappelli

Django NameError [nome do aplicativo] não está definido - python, django, django-grappelli

Tentando usar o django-grappelli para o meu tema de administração, a instalação foi surpreendentemente desafiadora. Correndo para o seguinte no meu urls.py:

NameError .. name "grappelli" is not defined

O erro é lançado na linha

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

Grappelli instalado com pip, e grappelli está no meu diretório de sites-packages. Adicionado ao meu INSTALLED_APPS, executei o syncdb, tentei adicionar grappelli ao meu pythonpath, mas não tive sorte. Se eu importar grappelli no urls.py, o erro muda para um AttributeError - "module" has no attribute "urls"

Sugestões ou qualquer tipo de ajuda é muito apreciada.

Respostas:

17 para resposta № 1

A linha deve ler:

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

include ou leva um caminho para um módulo de urls OU pode ser um objeto python que retorna os padrões de URL http://docs.djangoproject.com/en/dev/topics/http/urls/#include

Então, suas duas opções são a linha acima (caminho para urls) ou

from grappelli.urls import urlpatterns as grappelli_urls

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

Quanto ao erro, é um dos erros mais diretos no Python para depurar: grappelli não está definido, como em .. não foi definido.

Imagine estar no shell:

>>> print grappelli
exception: variable undefined
>>> grappelli = "hello" # we just defined grappelli
>>> print grappelli
"hello"

10 para resposta № 2

Eu sei que isso tem mais de um ano, mas foi um dos principais resultados no Google quando eu estava tendo o mesmo problema.

Em vez de importar urlpatterns de grapelli.urls, você também pode alterar a instrução include ()

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

para

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

Isso me tirou um pouco também até que percebi a necessidade de citar o package.urls na instrução include.


1 para resposta № 3

Você pode querer importar o seguinte em urls.py:

from django.conf.urls import include

1 para resposta № 4

Ao declarar suas rotas, você se esqueceu de citar uma expressão.

Substituir grappelli.urls de "grappelli.urls" para fazer funcionar!

A sintaxe correta seria então:

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