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/

 

posted @ 2019-09-05 17:15  微狐  阅读(109)  评论(0)    收藏  举报