Erreur d'importation Django - aucun module nommé django.conf.urls.defaults

93

J'essaye d'exécuter statsd / graphite qui utilise django 1.6.

En accédant à l'URL du graphite, j'obtiens une erreur du module django

Fichier "/opt/graphite/webapp/graphite/urls.py", ligne 15, provenant de django.conf.urls.defaults import * ImportError: Aucun module nommé defaults

Cependant, je ne trouve pas le paquet django par défaut à l' intérieur/Library/Python/2.7/site-packages/django/conf/urls/

Veuillez aider à résoudre ce problème.

GJain
la source
4
Quelle version de django utilisez-vous?
yuvi
1
python -c "import django; print (django.get_version ())" 1.6
GJain

Réponses:

193

django.conf.urls.defaults a été supprimé dans Django 1.6 . Si le problème était dans votre propre code, vous le résoudriez en changeant l'importation en

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

Cependant, dans votre cas, le problème provient d'une application tierce, graphite. Le problème a été résolu dans la branche principale de graphite et dans la version 0.9.14+.

Dans Django 1.8+, vous pouvez supprimer patternsde l'importation et utiliser une liste de url()s à la place.

from django.conf.urls import url, include
Alasdair
la source
Vérifiez également si vous avez défini ROOT_URLCONF dans votre settings.py! Cette variable doit également être adaptée. Dans mon cas, c'était ROOT_URLCONF = 'urls' et a dû être changé en ROOT_URLCONF = 'app.urls'
Lukas Schulze
motifs a été supprimés. Vous pouvez directement utiliser une liste python pour ajouter des URL au lieu d'utiliser des modèles.
Akshay Hazari
@Alasdair Travaillait avec un code de django 1.6 et a trouvé le remplacement par défaut ici. J'ajoutais juste à la réponse. Pour que quelqu'un d'autre puisse trouver toute l'aide en un seul endroit.
Akshay Hazari
3

Si, pour une raison quelconque, vous ne souhaitez pas revenir à Django 1.5.x ou mettre à niveau Graphite, vous pouvez appliquer le correctif à votre ancien Graphite avec:

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

..dans votre <graphite_dir>/webapp/graphitedir.

Cela m'a aidé avec mon Graphite 0.9.12 et Django 1.7 (.5).

(J'ai également dû faire:

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

.. Plus tard, car après avoir réussi à démarrer Graphite, certaines de ses fonctionnalités ne fonctionnaient pas. Maintenant, ils travaillent pour moi mais YMMV.)

Greg Dubicki
la source
1
Merci, cela semble toujours être le cas dans l'itération actuelle de ce logiciel! Vos correctifs fonctionnent bien pour moi dans Graphite 0.9.12 et Django 1.6.1!
Andrew White