[root@localhost superlists]# tree
.
├── db.sqlite3
├── lists
│ ├── admin.py
│ ├── admin.pyc
│ ├── apps.py
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── migrations
│ │ ├── __init__.py
│ │ └── __init__.pyc
│ ├── models.py
│ ├── models.pyc
│ ├── templates
│ │ └── home.html
│ ├── tests.py
│ ├── tests.pyc
│ ├── views.py
│ └── views.pyc
├── manage.py
└── superlists
├── __init__.py
├── __init__.pyc
├── settings.py
├── settings.pyc
├── urls.py
├── urls.pyc
├── wsgi.py
└── wsgi.pyc
superlists/urls.py 的真正作用是定义整个网站使用的 URL。如果某些 URL 只在 lists 应用中使用,Django 建议使用单独的文件 lists/urls.py,让应用自成一体。定义 lists 使用的URL,最简单的方法是复制现有的 urls.py:
$ cp superlists/urls.py lists/
然后把 superlists/urls.py 中的三行定义换成一个 include 。注意, include 可以使用一个正则表达式作为 URL 的前缀,这个前缀会添加到引入的所有 URL 上(这就是我们去除重复的方法,同时也让代码结构更清晰):
>>>> superlists/urls.py
urlpatterns = patterns('',
url(r'^$', 'lists.views.home_page', name='home'),
url(r'^lists/', include('lists.urls')),
# url(r'^admin/', include(admin.site.urls)),
)
在 lists/urls.py 中只需包含那三个 URL 的后半部分,而且不用再写父级 urls.py 中的其他定义:
>>>>lists/urls.py(ch06/045)
from django.conf.urls import patterns, url
urlpatterns = patterns('',
url(r'^(\d+)/$', 'lists.views.view_list', name='view_list'),
url(r'^(\d+)/add_item$', 'lists.views.add_item', name='add_item'),
url(r'^new$', 'lists.views.new_list', name='new_list'),
)