/ / Django NameError [nazwa aplikacji] nie jest zdefiniowany - python, django, django-grappelli

Django NameError [nazwa aplikacji] nie jest zdefiniowany - python, django, django-grappelli

Próba użycia django-grappelli dla mojego motywu administratora, instalacja była zaskakująco trudna. W moim pliku urls.py występują następujące elementy:

NameError .. name "grappelli" is not defined

Błąd jest generowany na linii

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

Zainstalowałem grappelli z pipem, a grappelli znajduje się w moim katalogu witryn. Dodano do mojego INSTALLED_APPS, uruchomiłem syncdb, próbowałem dodać grappelli do mojej ścieżki python, ale bez powodzenia. Jeśli zaimportuję grappelli do urls.py, błąd zmieni się na AttributeError - "module" has no attribute "urls"

Sugestie lub wszelka pomoc jest bardzo ceniona.

Odpowiedzi:

17 dla odpowiedzi nr 1

Wiersz powinien brzmieć:

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

include albo pobiera ścieżkę do modułu adresów URL LUB może to być obiekt python, który zwraca wzorce adresów URL http://docs.djangoproject.com/en/dev/topics/http/urls/#include

Więc dwie opcje to albo linia powyżej (ścieżka do adresów URL), albo

from grappelli.urls import urlpatterns as grappelli_urls

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

Jeśli chodzi o błąd, jest to jeden z najprostszych błędów w Pythonie do debugowania: grappelli nie jest zdefiniowany, ponieważ w .. nie został zdefiniowany.

Wyobraź sobie, że jesteś w skorupce:

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

10 dla odpowiedzi nr 2

Zdaję sobie sprawę, że ma ponad rok, ale był to jeden z najlepszych wyników w Google, kiedy miałem ten sam problem.

Zamiast importować urlpatterns z grapelli.urls, możesz również zmienić instrukcję include ()

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

do

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

To mnie trochę odrzuciło, dopóki nie zauważyłem potrzeby cytowania pliku package.urls w instrukcji include.


1 dla odpowiedzi nr 3

Możesz zaimportować następujące elementy urls.py:

from django.conf.urls import include

1 dla odpowiedzi nr 4

Podczas deklarowania trasy zapomniałeś podać wyrażenie.

Zastąpić grappelli.urls przez "grappelli.urls" aby działało!

Poprawna składnia to:

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