Erro de importação do Django - nenhum módulo denominado django.conf.urls.defaults

93

Estou tentando executar statsd / graphite que usa django 1.6.

Ao acessar o URL de grafite, recebo um erro do módulo django

Arquivo "/opt/graphite/webapp/graphite/urls.py", linha 15, de django.conf.urls.defaults import * ImportError: Nenhum módulo chamado defaults

No entanto, não encontro o pacote django padrão dentro/Library/Python/2.7/site-packages/django/conf/urls/

Por favor, ajude a resolver este problema.

GJain
fonte
4
Qual versão do django você está usando?
yuvi
1
python -c "import django; print (django.get_version ())" 1.6
GJain

Respostas:

193

django.conf.urls.defaults foi removido do Django 1.6 . Se o problema estivesse no seu próprio código, você o corrigiria alterando a importação para

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

No entanto, no seu caso, o problema está em um aplicativo de terceiros, o grafite. O problema foi corrigido no branch master da grafite e na versão 0.9.14+.

No Django 1.8+ você pode remover patternsda importação e usar uma lista de url()s em seu lugar.

from django.conf.urls import url, include
Alasdair
fonte
Verifique também se você configurou ROOT_URLCONF em settings.py! Esta variável também deve ser adaptada. No meu caso, era ROOT_URLCONF = 'urls' e teve que ser alterado para ROOT_URLCONF = 'app.urls'
Lukas Schulze
padrões foram removidos. Você pode usar diretamente uma lista python para adicionar urls em vez de usar padrões.
Akshay Hazari
@Alasdair estava trabalhando com um código do django 1.6 e encontrou a substituição padrão aqui. Só estava adicionando à resposta. Para que outra pessoa pudesse encontrar toda a ajuda em um só lugar.
Akshay Hazari
3

Se por algum motivo você não quiser fazer o downgrade para Django 1.5.x ou atualizar o Graphite, então você pode aplicar a correção ao seu Graphite antigo com:

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

..em seu <graphite_dir>/webapp/graphitedir.

Isso me ajudou com meu Graphite 0.9.12 e Django 1.7 (.5).

(Eu também tive que fazer:

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

..mais tarde, quando consegui iniciar o Graphite, alguns de seus recursos não funcionaram. Agora eles funcionam para mim, mas YMMV.)

Greg Dubicki
fonte
1
Obrigado, este ainda parece ser o caso na iteração atual deste software! Suas correções funcionam bem para mim no Graphite 0.9.12 e no Django 1.6.1!
Andrew White