从urls.py导入时,Django无法找到模块

时间:2012-12-20 10:15:00

标签: django

我在导入另一个urlpatterns时遇到问题。

python manage.py shell - > from bar.urls import urlpatterns工作正常,但当我尝试从bar导入时,Django找不到foo/foo/urls.py:“没有名为bar.urls的模块。”

tree ~/workdir/foo

foo
├── foo
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── local_db
│   │   └── foo.db
│   ├── settings.py
│   ├── urls.py
│   ├── wsgi.py
├── __init__.py
├── manage.py
├── bar
│   ├── __init__.py
│   ├── models.py
│   ├── baz
│   │   ├── __init__.py
│   │   ├── __init__.pyc
│   │   ├── baz_interface.py
│   │   ├── test.py
│   ├── templates
│   │   └── index.html
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── README.md
└── requirements.txt

5 directories, 28 files

foo/urls.py

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

urlpatterns = patterns('',
        (r'^test/', include('foo.bar.urls')),
)

# this will fail too :
# 1.
# from foo.bar.urls import urlpatterns as test
# urlpatterns += test
# 2.
# from bar.urls import urlpatterns as test
# urlpatterns += test
# 3.
#urlpatterns = patterns('',
#    (r'^test/', include('bar.urls')),
#)

bar/urls.py

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

urlpatterns = patterns('',
     url(r'^$', 'foo.bar.views.viewname', name='viewname'),
)

我在Django 1.4.3的virtualenv中运行Python 2.7.3 bar位于INSTALLED_APPS ~/workdir/foo/在我的python路径中。

如何从urlpattern开始foo/foo/urls.py导入工作?

谢谢。

2 个答案:

答案 0 :(得分:4)

您的bar/urls.py应如下:

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

urlpatterns = patterns('bar.views',
    url(r'^$', 'viewname', name='viewname'),
)

您的foo/urls.py是:

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

urlpatterns = patterns('',
    url(r'^test/', include('bar.urls')),
)

答案 1 :(得分:0)

如果您检查应用程序启动后检查sys.path变量,您将看到列表中的第一个路径是:foo - 根目录。如果我理解你的话,你可以找到像

这样的东西
   sys.path.insert(0, '..') 

这是非常糟糕的解决方案,更好的是:

   PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))   
   sys.path.insert(0, os.path.join(PROJECT_ROOT, '..')

最佳解决方案是在foo上方再创建一个foo目录。项目为:

python foo/manage.py runserver