2.0版本写法
from django.urls import path
urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles/<int:year>/', views.year_archive),
path('articles/<int:year>/<int:month>/', views.month_archive),
path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/([0-9]{4})/$', views.year_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]
1.urlpatterns按顺序往下匹配,成功匹配不在往下继续
2.若要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)。
2.urls.py(路由系统)
1.正则匹配的模式
1.分组匹配 能够在调用视图函数的时候能够传递位置参数
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/([0-9]{4})/$', views.year_archive),
会传给视图函数一个4位数字的位置参数
2.分组命名匹配,能够在调用视图函数的时候能够传递关键字参数
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
会传递给视图函数一个4为数字的关键字参数,相当于 year=
3.include 分级路由
请求的顺序:
请求——>project/urls.py-->-->app/urls.py-->app/views.py
在URL里面
url(r'^app01/', include(app01_urls, namespace="app01"),),
url匹配规则的别名
1.起别名是为了增加代码的健壮性
2 用法
1)在views.py中如何根据别名找到url
from django.urls import reverse
url=reverse('别名')
2)在模板语言中如何根据别名找到url
{% url ‘别名’%}
3。带参数的url如何反向生成?
1.位置参数
1)在views.py中:
reverse('别名',args=(参数1,参数2,。。。))
2)在模板语言中:
{% url '别名' 参数1,参数2.。。 %}
2.关键字参数
1).在views.py中:
reverse('别名',kwargs={'k1':参数1,。。。})
2)在模板语言中:
{% url ‘别名’ 参数1,参数2.。。%}
4 namespace(命名空间)
# 使用include语法,将其他的urls.py 包含进来
url(r'^app01/', include(app01_urls, namespace="app01"),),
url(r'^app02/', include(app02_urls, namespace="app02")),
1. 位置参数
1. 在views.py中:
reverse("命名空间:别名", args=(参数1, 参数2, ...))
2. 在模板语言中:
{% url "命名空间:别名" 参数1, 参数2... %}
2. 关键字参数
1. 在views.py中:
reverse("命名空间:别名", kwargs={"k1":参数1, ...})
2. 在模板语言中:
{% url "命名空间:别名" 参数1, 参数2... %}
目的就是获得唯一的url