/ / Django NameError [име на приложение] не е дефинирано - python, django, django-grappelli

Django NameError [име на приложението] не е дефинирано - python, django, django-grappelli

Опитвайки се да използвам django-grappelli за моята администраторска тема, инсталацията е изненадващо предизвикателна. В urls.py ми се показва следното:

NameError .. name "grappelli" is not defined

Грешката се хвърля върху линията

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

Инсталира се grappelli с pip, а grappelli е в директорията сайтове-пакети. Добавено към моя INSTALLED_APPS, избяга синхронизирам, опита се да добавя грапели към моя pythonpath, но няма късмет. Ако импортирам grappelli в urls.py, грешката се променя на AttributeError - "module" has no attribute "urls"

Предложения или всякакъв вид помощ са високо оценени.

Отговори:

17 за отговор № 1

Редът трябва да се чете:

(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"

10 за отговор № 2

Осъзнавам, че това е над една година, но това беше един от най-добрите резултати в Google, когато имах същия проблем.

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

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

да се

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

Това ме отблъсна за малко, докато не забелязах необходимостта от цитиране на package.urls в оператора include.


1 за отговор № 3

Може да искате да импортирате следното в urls.py:

from django.conf.urls import include

1 за отговор № 4

Когато декларирате маршрутите си, сте забравили да цитирате израз.

Заменете grappelli.urls от "grappelli.urls" за да работи!

Тогава правилния синтаксис ще бъде:

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