Django-Importfehler - kein Modul mit dem Namen django.conf.urls.defaults

93

Ich versuche, statsd / graphite auszuführen, das django 1.6 verwendet.

Beim Zugriff auf die Graphit-URL wird ein Django-Modulfehler angezeigt

Datei "/opt/graphite/webapp/graphite/urls.py", Zeile 15, aus django.conf.urls.defaults import * ImportError: Kein Modul mit dem Namen default

Allerdings finde ich nicht defaults django - Paket im/Library/Python/2.7/site-packages/django/conf/urls/

Bitte helfen Sie bei der Behebung dieses Problems.

GJain
quelle
4
Welche Django-Version verwendest du?
Yuvi
1
python -c "import django; print (django.get_version ())" 1.6
GJain

Antworten:

193

django.conf.urls.defaults wurde in Django 1.6 entfernt . Wenn das Problem in Ihrem eigenen Code liegt, können Sie es beheben, indem Sie den Import auf ändern

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

In Ihrem Fall liegt das Problem jedoch in einer Drittanbieter-App, Graphit. Das Problem wurde in Graphites Hauptzweig und Version 0.9.14+ behoben.

In Django 1.8+ können Sie patternsaus dem Import entfernen und url()stattdessen eine Liste von s verwenden.

from django.conf.urls import url, include
Alasdair
quelle
Überprüfen Sie auch, ob Sie ROOT_URLCONF in Ihrer settings.py festgelegt haben! Diese Variable muss ebenfalls angepasst werden. In meinem Fall war es ROOT_URLCONF = 'urls' und musste in ROOT_URLCONF = 'app.urls' geändert werden
Lukas Schulze
Muster wurde entfernt. Sie können direkt eine Python-Liste verwenden, um URLs hinzuzufügen, anstatt Muster zu verwenden.
Akshay Hazari
@Alasdair arbeitete mit einem Code aus Django 1.6 und fand hier den Standardersatz. Fügte nur die Antwort hinzu. Damit jemand anderes alle Hilfe an einem Ort finden kann.
Akshay Hazari
3

Wenn Sie aus irgendeinem Grund nicht zu Django 1.5.x degradieren wollen oder ein Upgrade Graphite , dann können Sie sich bewerben das Update auf Ihre ältere Graphite mit:

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

..in deinem <graphite_dir>/webapp/graphiteDir.

Dies half mir mit meinem Graphite 0.9.12 und Django 1.7 (.5).

(Ich musste auch tun:

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' {} \;

..nachher als nachdem ich es geschafft hatte, Graphite zu starten, funktionierten einige seiner Funktionen nicht. Jetzt arbeiten sie für mich aber YMMV.)

Greg Dubicki
quelle
1
Vielen Dank, dies scheint in der aktuellen Iteration dieser Software immer noch der Fall zu sein! Ihre Korrekturen funktionieren gut für mich in Graphite 0.9.12 und Django 1.6.1!
Andrew White