1

別の をインポートする際に問題が発生していurlpatternsます。

python manage.py shell->正常に動作していますが、 「bar.urls という名前のモジュールがありません」からインポートしようとするとfrom bar.urls import urlpatterns、Django が見つかりません。barfoo/foo/urls.py

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で実行Django 1.4.3しています。は私の中にあります。私のpythonパスにあります。 Python 2.7.3
barINSTALLED_APPS
~/workdir/foo/

urlpattern仕事からインポートするにはどうすればよいfoo/foo/urls.pyですか?

ありがとうございました。

4

2 に答える 2

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')),
)
于 2012-12-20T16:41:02.410 に答える
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, '..')

最善の解決策は、の上にもう1つのfooディレクトリを作成することfooです。そして、次のようにプロジェクトします。

python foo/manage.py runserver
于 2012-12-20T16:31:02.707 に答える