1.1 Django路由分发
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('app01/', include(('app01.urls', 'app01'), namespace='app01')),
]
1.2 普通url
1.2.1 app01/urls.py
from django.urls import path, re_path
from app01 import views
urlpatterns = [
re_path('index1/$', views.index1, name='indexname1'),
]
1.2.2 app01/views.py
from django.shortcuts import HttpResponse
def index1(request):
print( request.GET )
nid = request.GET.get('uid')
return HttpResponse('无正则匹配url')
1.3 正则的url (\d+)
1.3.1 app01/urls.py
from django.urls import path, re_path
from app01 import views
urlpatterns = [
re_path('index2/(\d+)/$', views.index2, name='indexname2'),
]
1.3.2 app01/views.py
from django.shortcuts import HttpResponse
def index2(request, uid):
print( uid )
return HttpResponse('基于(\d+)正则的url')
1.4 正则分组(?P<nid>\d+)
- 基于正则分组
(?P<nid>\d+),可以不考虑接收参数顺序 (推荐)
1.4.1 app01/urls.py
from django.urls import path, re_path
from app01 import views
urlpatterns = [
re_path('index3/(?P<nid>\d+)/(?P<pid>\d+)/$', views.index3, name='indexname3'),
]
1.4.2 app01/views.py
from django.shortcuts import HttpResponse
def index3(request, nid, pid):
print(nid)
print(pid)
return HttpResponse('基于正则分组url')
1.5 使用name构建自己想要的url
1.5.1 app01/urls.py
from django.urls import path, re_path
from app01 import views
urlpatterns = [
re_path('index4/$', views.index4),
]
1.5.2 app01/views.py
from django.shortcuts import HttpResponse
from django.urls import reverse
def index4(request):
url1 = reverse('indexname1')
url2 = reverse('indexname2', args=(1,))
url3 = reverse('indexname3', kwargs={'pid': 1, "nid":2})
return render(request, 'index.html')
1.5.3 反解出url中的name
- 根据request.path中的绝对路径反解出url中的name名字
resolve_url_obj = resolve(request.path)
resolve_url_obj.url_name