我在导入另一个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
导入工作?
谢谢。
答案 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