## 路由定義位置
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列表頁