准备
首先新建一个Django 项目。
django-admin startproject urlTest
# 进入manage.py所在目录后
./manage.py startapp app1
./manage.py startpap app2
此时我们新建了一个名为urlTest的项目,其中有两个模块的名称分别为app1和app2。(树目录结构如下)
.
├── app1
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── app2
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── db.sqlite3
├── manage.py
└── urlTest
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
在settings.py中我们可以看到:
ROOT_URLCONF = 'urlTest.urls'
#浏览器访问的所有的url都将在urlTest目录下的urls.py中配置,
urls.py默认加入了admin模块的url:
# urlTest.urls.py
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
也即是说,每个url都映射到了一个指定的view函数,其中views中定义的函数接受一个request,并返回一个response。
如对view的工作原理不清楚,可参考这里request-response。
这里写代码片
正则表达式与命名组
首先在app1模块中通过正则表达式分别动态的匹配年,年月,年月日类型的URL。
默认的情况下app1模块中是没有urls.py文件,在我们新建了之后,还需要在urlTest的urls.py加上:
url(r'^app1/', include('app1.urls'))
#这样就包括了app1模块的urls.py文件
接下来在新建的app1模块下的urls.py中写动态正则表达式:
# app1.urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$'