Django导入错误 - 没有名为django.conf.urls.defaults的模块

98

我正在尝试运行使用django 1.6的statsd/graphite。

访问graphite URL时,出现了django模块错误。

File "/opt/graphite/webapp/graphite/urls.py", line 15, in from django.conf.urls.defaults import * ImportError: No module named defaults

然而,在/Library/Python/2.7/site-packages/django/conf/urls/ 中我没有找到名为defaults的django包。

请帮忙解决此问题。


4
你正在使用哪个版本的Django? - yuvi
1
python -c "import django; print(django.get_version())" 1.6 - GJain
3个回答

198

django.conf.urls.defaults 在Django 1.6中已被移除。如果问题出现在您自己的代码中,您需要通过将导入更改为以下内容来解决:

```python from django.conf.urls import * ```
from django.conf.urls import patterns, url, include

然而,在您的情况下问题出现在第三方应用程序Graphite中。该问题已经在Graphite的主分支和0.9.14+版本中得到解决

在Django 1.8+中,您可以从导入中删除patterns,并改用url()的列表。

from django.conf.urls import url, include

还要检查一下你的settings.py文件中是否设置了ROOT_URLCONF!这个变量也必须进行调整。在我的情况下,它是ROOT_URLCONF = 'urls',需要更改为ROOT_URLCONF = 'app.urls'。 - lszrh
模式已被移除。您可以直接使用Python列表来添加URL,而不是使用模式。 - Akshay Hazari
@Alasdair 正在使用来自django 1.6的代码,并在此找到了defaults替换。 我只是在添加答案。 这样别人就可以在一个地方找到所有帮助。 - Akshay Hazari

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,但其中一些功能不起作用。现在它们对我来说可以正常工作,但你的情况可能会有所不同。


1
谢谢,这在当前版本的软件中仍然是可行的!您的修复对我在Graphite 0.9.12和Django 1.6.1中都非常有效! - Andrew White

0

前往安装Python的文件位置。 在该路径上打开cmd,然后使用命令>> pip install django 安装Django

然后在Python shell上交叉检查导入django(应该不会有任何反应) 或者直接使用命令>> python -m django --version

它将简单地给出版本 输入图像描述

输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接