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