### 11.8 路由
#### 11.8.1 urlconf
```python
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^admin/',admin.site.urls), #这里用到了正则
url(r'^home',views.home,{},name='home'),
]
```
#### 11.8.2 分组和命名分组
url上捕获的都是字符串
分组
```python
url(r'^blog/([0-9]{4})/(\d{2})),views.blogs,name='blogs')
#以括号为单位,捕获到的参数会按照位置传参传递给视图函数
```
命名分组
```python
url(r'^blog/(?P<year>[0-9]{4})/(?P<month>\d{2})),views.blogs,name='blogs')
#捕获的参数会按照关键字传参传递给视图函数
```
传递参数
```python
url(r'^home/(?P<year>\d{4})$'),views.home,{'year':2019,name='home'})
```
#### 11.8.3 路由分发
```python
from django.conf.urls import url,include
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/',admin.site.urls), #这里用到了正则
url(r'^app01',include('app01.urls',namespace='app01')),
url(r'^app02',include('app02.urls',namespace='app02')),
]
```
#### 11.8.4 url的命名和反向解析
静态路由
```python
url(r'^home/$',views.home,name='home')
```
反向解析:
- 模板 {% url 'blog' %} ------>'app01/home/'
- py文件
```python
from django.urls import reverse
reverse('home') ---->'app01/home/'
```
分组:
```python
url(r'^blog/([0-9]{4})/(\d{2})),views.blogs,name='blogs')
```
反向解析:
- 模板 {% url 'blog' '2019' '06'%} ------>'app01/blog/2019/06'
- py文件
```python
from django.urls import reverse
reverse('blogs','args=('2019','06')') ---->'app01/blog/2019/06'
```
命名分组:
```python
url(r'^blog/(?P<year>[0-9]{4})/(?P<month>\d{2})),views.blogs,name='blogs')
```
反向解析:
- 模板
- {% url 'blog' '2019' '06'%} ------>'app01/blog/2019/06' 按照位置传参
- {% url'blogs year='2019' month='06' %}-----> 'app01/blog/2019/06' 按照关键字传参
- py文件
```python
from django.urls import reverse
reverse('blogs','args=('2019','06')') ---->'app01/blog/2019/06'
from django.urls import reverse
reverse('blogs','kwargs=('year'=2019','month'='06')') ---->'app01/blog/2019/06'
```
#### 11.8.5 namespace
```python
url(r'^app01',include('app01.urls',namespace='app01')),
```
应用
```python
{% url 'app01:home' %} #在模板中应用,一定要加上namespace
reverse('app01:home') #在py文件中应用,一定要加上namespace
```