django基础六
路由
路由本质:url与调用的视图函数之间的映射表
基本格式
from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图,参数,别名), ] #django1.11版本 from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^class/$', views.clsss), ] #django2.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), ] #2.0中的re_path和1.11版本的url是一样的用法
无名分组
url(r'^blog/([0-9]{4})/([0-9]{2})/$',views.blogs),
#从url上获取的参数都是字符串
#捕获的参数按照位置参数传递给视图函数
有名分组
url(r'^blog/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$',views.blogs),
#捕获的参数按照关键字参数传递给视图
路由分发
# 在setting中设置url路径: ROOT_URLCONF='根.urls',可修改默认url使用路径 # 当有很多app时,在每一个app中都创建一个url.py来写自己的路由然后在根目录的urls.py用include分发路由 #根目录urls.py from django.conf.urls import url,include from django.contrib import admin #把app自己的url分发出去,在项目设置include urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^app01/', include('app01.urls')), ] #分发url到app,注意:r‘中的/’必须有,否则与分化路径拼接,少/ #app01下的urls.py from django.conf.urls import url from app01 import views urlpatterns = [ url(r'login/', views.login), url(r'(?P<d1>[0-9]{4})/(?P<d2>[0-9]{2})/(?P<d3>[0-9]{2})', views.text), ] #这时访问app01的路径变为 '127.0.0.1:8000/app01/login/'
命名空间(namespace)
#根目录urls.py urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^app01/', include('app01.urls', namespace='app01')), url(r'^app02/', include('app02.urls', namespace='app02')), ] #app下urls.py urlpatterns = [ url(r'login/(/d{4})/(/d){2}/$', views.blogs,name='blogs'), ] #模板 {% url 'app01:blogs' 2012 09 %} #视图 reverse('app01:blogs',args=['2019','09'])
多层命名空间 #根url urlpatterns = [ url(r'^app01/', include('app01.urls', namespace='app01')), ] #app01url urlpatterns = [ url(r'^app02/', include('app02.urls', namespace='app02')), ] #app02中url urlpatterns = [ url(r'login/(/d{4})/$', views.login,name='login'), ] #模板中使用: {% app01:app02:login 2019 %} #py文件中使用 from django.url import reverse url=reverse('app01:app02:login' args=('2019',))
url命名和url反向解析
静态路由
#命名 url(r'^publisher_list/',views.publisher_list ,name='publisher'), #反向解析 #模板 {% url 'publisher' %} # 得到 /publisher_list/ #py文件 from django.urls import reverse reverse('publisher') #得到 '/publisher_list/' redirect('publisher') #重定向可以不写reverse
路由分发,无名分组路由
#命名 url(r'^blogs/([0-9]{4})/([0-9]{2})/$', views.blogs,name='blogs'), #反向解析 #模板 {% url 'blogs' '2019' '09' %} #得到/app01/blogs/2019/09/ #py文件 from django.urls import reverse reverse('blogs',args=('2019','09')) #得到 /app01/blogs/2019/09/
路由分发,有名分组
#命名 url(r'^blogs/(?P<year>[0-9]{4})/(?P<month>[0-9{2})/$',views.blogs,name='blogs'), #反向解析 #模板 {% url ‘blogs’ '2019' '09' %} #得到 /app01/blogs/2019/09/ #py文件 from django.urls import reverse reverse('blogs',args=('2019','09')) #得到 /app01/blogs/2019/09/ reverse('blogs', kwargs={'year': '2019', 'month': '12'}) #得到 /app01/blogs/2019/12/

浙公网安备 33010602011771号