## 路由定义位置
django的路由是定义在 `urls.py` 文件下的 `urlpatterns` 列表中的。 `urls.py` 文件是路由解析的入口。
```python
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^', views.index, name="index")
]
```
一般每个子应用为了独立,都有自己的 `urls.py` 来保存该应用的路由,然后使用 `include` 函数把子路由包含在主路由中。
```python
# 子路由
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^', views.index, name="index")
]
```
```python
# 使用include函数把子路由包含在主路由中
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^demo/', include("demo.urls"))
]
```
也可以把所有的路由都定义在主路由中,子应用不再设置。
```python
from django.conf.urls import url
from django.contrib import admin
from demo.views import index
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^demo/', index)
]
```
## 路由的解析顺序
django的路由解析是从上到下的,django接收到一个请求后,他会从主工程的路由文件中 `urls.py`下的 `urlpatterns` 列表从上到下匹配,匹配到一个符合规则的路由,会执行后边的函数。如果后边是 `include` 函数,则会进入包含的子路由中,从上到下匹配。
如果django匹配到一个符合规则的路由,会立即执行后面的函数,而不会继续向下执行。所以,当上边的匹配规则如果包含了下边的规则,可能会把下边的路由屏蔽掉。
```python
urlpatterns = [
url(r'^say', views.say),
url(r'^sayhello', views.sayhello),
]
```
即使访问 `sayhello` 路径,他也会进入到 `say` 函数执行,因为他先匹配成功了 `say` 的路由规则。
所以定义路由规则描述要准确,或者用 `/` 结尾。
## 路由命名
在定义路由的时候,可以指定第三个参数,来为路由起别名
1. 使用 `include` 定义的路由时,在 `include` 函数中使用关键字参数 `namespace` 定义命名空间
```python
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^demo/', include("demo.urls", namespace="demo"))
]
```
- 命名空间的作用:避免不同应用中的路由使用了相同的名字发生冲突,使用命名空间区别开。
2. 只使用 `url` 定义路由时,使用关键字参数 `name` 定义路由名字
```python
urlpatterns = [
url(r'^', views.index, name="index")
]
```
## reverse反解析
使用reverse函数,可以根据路由名称,返回具体的路径,如:
```python
from django.core.urlresolvers import reverse # 注意导包路径
def index(request):
return HttpResponse("hello world!")
def say(request):
url = reverse('users:index') # 返回 /users/index/
print(url)
return HttpResponse('say')
```
- 对于未指明namespace的,reverse(路由name)
- 对于指明namespace的,reverse(命名空间namespace:路由name)
- 1.介绍
- 2.工程搭建
- 2.1.环境配置
- 2.2.创建工程
- 2.3.创建子应用
- 2.3.1.pycharm打开项目
- 2.4.创建视图
- 3.基本配置
- 3.1.settings基本配置项
- 3.2.路由配置
- 4.请求响应
- 4.1.request
- 4.2.response
- 4.3.cookie
- 4.4.session
- 5.类视图中间件
- 5.1.类视图
- 5.2中间件
- 6.数据库
- 6.1.数据库配置
- 6.2定义模型类
- 6.3数据库迁移
- 6.4数据库操作
- 6.5查询集
- 6.6模型管理器
- 7.模板表单
- 7.1使用模板
- 7.2模板标签
- 7.3表单
- 8.后台管理
- 8.1Admin
- 8.2自定义模型类样式
- 8.3列表页