Опитвайки се да използвам 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"))