路由系统
匹配方式
1. 正则表达式的模糊匹配
2. 分组匹配 --> 相当于给视图函数传递位置参数
3. 分组命名匹配 --> 相当于给视图函数传递关键字参数
(两个不要混合使用)
传参
位置传参
路由 url(r'^book1/([0-9]{2,4})/([a-zA-Z]{2})/$', views.book1), 接收 # 位置参数 def book1(request, arg1, arg2): print("arg1:", arg1) print("arg2:", arg2) return HttpResponse("传参成功~")
关键字传参
路由 url(r'^book2/(?P<year>[0-9]{2,4})/(?P<title>[a-zA-Z]{2})/$', views.book2), 接收 # 关键字参数 def book2(request, year, title): print("year:", year, type(year)) print("title:", title) return HttpResponse("传参成功~")
反向解析
别名和命名空间
模板使用
命名空间:别名 <p>张:<a href="{% url 'car:book' 2018 'nb' %}">点我</a></p>
路由
优先找命名空间,再找别名, 命名空间 url(r'^car/', include((app01_urls,'app01'), namespace="car"), ), 别名 url(r'^home1/', views.home, {"age": 18}, name="home"),
视图中使用
路由
路由 url(r'^car/', include((app01_urls,'app01'), namespace="car"), ), 别名 # url(r'^book/([0-9]{2,4})/([a-zA-Z]{2})/$', views.book, name="book"), # 关键字参数 url(r'^book/(?P<year>[0-9]{2,4})/(?P<title>[a-zA-Z]{2})/$', views.book, name="book")
视图
def home(request, age): print(age) # 传位置参数 # redirect_url = reverse("car:book", args=(2018, "sb")) from django.urls import reverse # 传关键字参数 redirect_url = reverse("car:book", kwargs={"year": 2018, "title": "sb"}) print(redirect_url) # return redirect(redirect_url) return render(request, "test/home.html")
其他
默认路由补充/配置
# 默认会在URL后面加上 '/',然后再去urls.py里面匹配对应关系 APPEND_SLASH = True
2. 路由系统(urls.py) http://www.cnblogs.com/liwenzhou/p/8271147.html 1. 正则表达式的模糊匹配 2. 分组匹配 --> 相当于给视图函数传递位置参数 3. 分组命名匹配 --> 相当于给视图函数传递关键字参数 (两个不要混合使用) ---------------------------- 这里是坎 ------------------------------------ 4. 反向解析URL 本质上就是给url匹配模式起别名,然后用过别名拿到具体的URL路径 1. 怎么起别名? 在url匹配模式中,定义name="别名" 2. 如何使用? 1. 在模板语言里面使用: {% url "别名" %} --> 得到具体的URL路径 2. 在视图中如何使用: from django.urls import reverse reverse("别名") --> 得到具体的URL路径 3. 如何传参数? 1. 模板语言中: {% url "别名" 2018 "nb" %} 2. 视图函数中 传位置参数: reverse("别名", args=(2018, "nb")) 传关键字参数: reverse("别名" kwargs={"year": 2018, "title": "nb"}) 4. namespace 为了防止不同的app下面的url匹配模式有重复的别名