2012-12-20 34 views
1

我遇到導入另一個問題urlpatterns的問題。從urls.py導入時,Django無法找到模塊

python manage.py shell - >from bar.urls import urlpatterns工作正常,但Django不找bar當我嘗試從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'), 
) 

我在virtualenv中上Python 2.7.3運行Django 1.4.3
bar在我的INSTALLED_APPS
~/workdir/foo/是我的Python路徑。

如何讓我的urlpatternfoo/foo/urls.py導入工作?

謝謝。

+0

是〜/ WORKDIR也是你的Python路徑?如果是的話,擺脫它... – mawimawi

+0

@mawimawi不,只有'〜/ workdir/foo'和我的virtualenv路徑。 'foo/urls.py'中的'url(r'^ $','bar.views.viewname',name ='viewname')'雖然可以工作,但我寧願包含'bar.urls'。 – rxdazn

回答

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')), 
) 
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