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 1Wiersz 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"))