Ошибка импорта Django - нет модуля с именем django.conf.urls.defaults


93

Я пытаюсь запустить statsd / graphite, который использует django 1.6.

При доступе к URL-адресу графита я получаю ошибку модуля django

Файл "/opt/graphite/webapp/graphite/urls.py", строка 15, из django.conf.urls.defaults import * ImportError: Нет модуля с именем по умолчанию.

Однако я не нахожу пакета django по умолчанию внутри/Library/Python/2.7/site-packages/django/conf/urls/

Пожалуйста, помогите решить эту проблему.


4
Какую версию django вы используете?
yuvi

1
python -c "import django; print (django.get_version ())" 1.6
GJain

Ответы:


193

django.conf.urls.defaults был удален в Django 1.6 . Если проблема была в вашем собственном коде, вы бы исправили ее, изменив импорт на

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

Однако в вашем случае проблема заключается в стороннем приложении graphite. Проблема исправлена в основной ветке графита и версии 0.9.14+.

В Django 1.8+ вы можете удалить его patternsиз импорта и использовать url()вместо него список s.

from django.conf.urls import url, include

Также проверьте, не установили ли вы ROOT_URLCONF в своем settings.py! Эта переменная также должна быть адаптирована. В моем случае это был ROOT_URLCONF = 'urls', и его нужно было изменить на ROOT_URLCONF = 'app.urls'
lszrh

шаблоны были удалены. Вы можете напрямую использовать список Python для добавления URL-адресов вместо использования шаблонов.
Акшай Хазари

@Alasdair Работал с кодом из django 1.6 и нашел здесь замену по умолчанию. Просто добавляю к ответу. Чтобы кто-то другой мог найти всю помощь в одном месте.
Акшай Хазари

3

Если по какой-то причине вы не хотите переходить на Django 1.5.x или обновлять Graphite, вы можете применить исправление к своему более старому Graphite с помощью:

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

..в вашем каталоге <graphite_dir>/webapp/graphite.

Это помогло мне с моими Graphite 0.9.12 и Django 1.7 (.5).

(Еще мне пришлось сделать:

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

..позже, когда мне удалось запустить Graphite, некоторые его функции перестали работать. Теперь они у меня работают, но YMMV.)


1
Спасибо, это все еще похоже на текущую версию этого программного обеспечения! Ваши исправления хорошо работают в Graphite 0.9.12 и Django 1.6.1!
Эндрю Уайт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.