Django NameError [имя приложения] не определено - PullRequest
6 голосов
/ 12 февраля 2011

Попытка использовать django-grappelli для моей темы администратора, установка оказалась на удивление сложной.Встречаясь со следующим в моем urls.py:

NameError .. name 'grappelli' is not defined

Ошибка выдается в строке

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

Установлен grappelli с pip, и grappelli находится в моем каталоге sites-packages.Добавил в мой INSTALLED_APPS, запустил syncdb, попробовал добавить grappelli в мой pythonpath, но не повезло.Если я импортирую grappelli в urls.py, ошибка изменится на AttributeError - 'module' has no attribute 'urls'

Предложения или помощь любого рода.

Ответы [ 4 ]

19 голосов
/ 12 февраля 2011

В строке должно быть написано:

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

include либо принимает путь к модулю URL, либо это может быть объект python, который возвращает шаблоны URL http://docs.djangoproject.com/en/dev/topics/http/urls/#include

Итак, вашими двумя вариантами являются либо строка выше (путь к URL), либо

from grappelli.urls import urlpatterns as grappelli_urls

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

Что касается ошибки, это одна из самых простых ошибок в Python для отладки: grappelli не определена, как в .. она не была определена.

Представьте, что вы находитесь в оболочке:

>>> print grappelli
exception: variable undefined
>>> grappelli = 'hello' # we just defined grappelli
>>> print grappelli
'hello'
11 голосов
/ 12 мая 2012

Я понимаю, что этому больше года, но это был один из лучших результатов в Google, когда у меня возникла такая же проблема.

Вместо импорта urlpatterns из grapelli.urls, вы также можете изменитьоператор include ()

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

до

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

Это также немного сбивало меня с толку, пока я не заметил необходимость цитирования package.urls в операторе include.*

1 голос
/ 27 января 2016

При объявлении ваших маршрутов вы забыли процитировать выражение.

Замените grappelli.urls на 'grappelli.urls', чтобы оно заработало!

Тогда правильный синтаксис будет:

(r'^grappelli/', include('grappelli.urls'))
1 голос
/ 13 января 2016

Вы можете импортировать следующее в urls.py :

from django.conf.urls import include
...