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 № 1A 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"))