Błąd importu Django - brak modułu o nazwie django.conf.urls.defaults

93

Próbuję uruchomić statsd / graphite, który używa django 1.6.

Podczas uzyskiwania dostępu do grafitowego adresu URL otrzymuję błąd modułu django

Plik „/opt/graphite/webapp/graphite/urls.py”, wiersz 15, z pliku django.conf.urls.defaults import * ImportError: Brak modułu o nazwie defaults

Jednak nie znajduję w środku domyślnego pakietu django/Library/Python/2.7/site-packages/django/conf/urls/

Proszę o pomoc w rozwiązaniu tego problemu.

GJain
źródło
4
Jakiej wersji django używasz?
yuvi
1
python -c "import django; print (django.get_version ())" 1.6
GJain

Odpowiedzi:

193

django.conf.urls.defaults został usunięty w Django 1.6 . Jeśli problem wystąpił w Twoim własnym kodzie, możesz go naprawić, zmieniając import na

from django.conf.urls import patterns, url, include

Jednak w twoim przypadku problem występuje w aplikacji innej firmy, graficie. Problem został rozwiązany w głównej gałęzi grafitu i wersji 0.9.14+.

W Django 1.8+ możesz usunąć patternsz importu i url()zamiast tego użyć listy s.

from django.conf.urls import url, include
Alasdair
źródło
Sprawdź również, czy ustawiłeś ROOT_URLCONF w swoim settings.py! Ta zmienna również musi zostać dostosowana. W moim przypadku był to ROOT_URLCONF = 'urls' i trzeba było go zmienić na ROOT_URLCONF = 'app.urls'
lszrh
wzory zostały usunięte. Możesz bezpośrednio użyć listy Pythona, aby dodać adresy URL zamiast używać wzorców.
Akshay Hazari
@Alasdair Pracował z kodem z django 1.6 i znalazłem tutaj domyślne zamienniki. Właśnie dodawałem do odpowiedzi. Aby ktoś inny mógł znaleźć wszelką pomoc w jednym miejscu.
Akshay Hazari
3

Jeśli z jakiegoś powodu nie chcesz przechodzić do Django 1.5.x lub aktualizować Graphite, możesz zastosować poprawkę do starszego Graphite za pomocą:

find ./ -type f -exec sed -i -e 's/from\ django\.conf\.urls\.defaults\ import\ \*/from\ django\.conf\.urls\ import\ \*/g' {} \;

..w Twoim <graphite_dir>/webapp/graphite reż.

Pomogło mi to w moim Graphite 0.9.12 i Django 1.7 (.5).

(Musiałem też zrobić:

find ./ -type f -exec sed -i -e 's/mimetype\=/content_type\=/g' {} \;
find ./ -type f -exec sed -i -e 's/content_type\=mimetype/content_type\=content_type/g' {} \;

.. później, gdy udało mi się uruchomić Graphite, niektóre jego funkcje nie działały. Teraz pracują dla mnie, ale YMMV.)

Greg Dubicki
źródło
1
Dzięki, nadal wydaje się, że tak jest w bieżącej iteracji tego oprogramowania! Twoje poprawki działają dobrze dla mnie w Graphite 0.9.12 i Django 1.6.1!
Andrew White