django的url分配
- 一般視圖模塊(views.py)都放在自己所屬的app目錄下,在app目錄下新建路徑模塊(urls.py),由app目錄下的urls.py來分配當前app的路徑。
- 在app目錄下新建視圖函數
1 from django.shortcuts import render, HttpResponse 2 3 4 # Create your views here. 5 6 7 def test(request): 8 return HttpResponse("HELLO WORLD")
- 然后再到app目錄下的urls.py中配置路由
1 from django.urls import path 2 from .views import * 3 4 app_name = 'crm' 5 6 urlpatterns = [ 7 path('test.html/', test), 8 ]
path方法里面有兩個參數,第一個是視圖函數的路由,第二個是該路由對應的視圖函數的函數名(注意是函數名,不要帶括號)
- app_name是當前app名的字符串,防止在后面的path,repath中出現重復的url名而發生難以進行的區分和管理。
- 最后帶項目跟目錄下配置該app的路徑,將app目錄里的urls.py包裹在項目根目錄下的urls.py里
1 from django.contrib import admin 2 from django.urls import path, include 3 4 5 urlpatterns = [ 6 path('admin/', admin.site.urls), 7 path('crm/', include('crm.urls')), 8 ]
這個path接受兩個參數,第一個是需要包含的app的名字,以"/"結尾, include里接受一個字符串("%s.urls" % app_name)
- 最后啟動服務,在manager.py的同級目錄下 : python manager.py runserver 127.0.0.1:1234 (你能映射的ip地址)。 然后打開瀏覽器輸入:127.0.0.1:1234/crm/test.html即可看到視圖函數返回的頁面
- path的完整規則: path(route, view, kwargs=None, name=None)
- route:是一個路由規則
- view是視圖函數名
- kwargs額外參數,是一個字典
- name是url規則的名字
django在url中捕獲參數
在urls.py(項目目錄下)定義url規則時使用變量名可以捕獲url中的值,傳遞給視圖
- 到app下的view模塊中新建個帶有參數的視圖函數
1 from django.shortcuts import render, HttpResponse 2 3 # Create your views here. 4 def test(request): 5 return HttpResponse("HELLO WORLD") 6 7 def index(request, pk): 8 return HttpResponse("你輸入的參數是:%s" % pk)
- 再到app下的urls.py中為這個函數配置路由,用<>包裹視圖函數中的參數
1 from django.urls import path 2 from .views import * 3 4 app_name = 'crm' 5 6 urlpatterns = [ 7 path('test.html/', test), 8 path('index/<pk>/', index) 9 ]
注意每條路由都由"/"結尾
- 最后啟動服務,在瀏覽器中輸入:127.0.0.1:1234/index/8, 返回想應得頁面
- 注意:路由中的參數必須和視圖函數中的一致
路徑轉換器
當我們想約束參數的類型的時,可以使用路徑轉換器
常見的路徑轉換器:
- int:必須為整數
- str:匹配除了"/"路徑分割符之外的所有的字符串
- slug:匹配任意ASCII字符+連字符和下划線
- uuid:格式化uuid
- path:匹配任意非空字符
轉換器用法:
path('index/<int:pk>/', index)
注意:轉換器(int)和參數中的冒號之間不能有空格