Reputation: 1390
I'm having an issue importing another urlpatterns
.
python manage.py shell
-> from bar.urls import urlpatterns
is working fine but Django doesn't find bar
when I try to import it from foo/foo/urls.py
: "No module named 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'),
)
I'm running Django 1.4.3
on Python 2.7.3
in a virtualenv.
bar
is in my INSTALLED_APPS
.
~/workdir/foo/
is in my python path.
How can I make my urlpattern
import from foo/foo/urls.py
work?
Thank you.
Upvotes: 1
Views: 3691
Reputation: 46284
Your bar/urls.py
should look like:
from django.conf.urls import patterns, include, url
urlpatterns = patterns('bar.views',
url(r'^$', 'viewname', name='viewname'),
)
Your foo/urls.py
is:
from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^test/', include('bar.urls')),
)
Upvotes: 4
Reputation: 2932
If you check you check sys.path
variable after your app started, your will see that your first path in list is: foo
- root directory. If I understand you right, you can may path something like
sys.path.insert(0, '..')
It's very bad solution, more better is:
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
sys.path.insert(0, os.path.join(PROJECT_ROOT, '..')
Best solution is create one more foo
directory above your foo
's. And project as:
python foo/manage.py runserver
Upvotes: 0