Django之路由系统

Django之路由系统

  • nazha对应内容 http://www.cnblogs.com/liwenzhou/p/8271147.html

  • 前言: URL配置(URLconf)就像Django所支撑网站的目录,它的本质是URL与要为该URL调用的视图函数之间的映射表

  • URLconf中配置

    • 基本格式(django1.x版本)

      • from django.conf.urls import url
        
        urlpatterns = [
             url(正则表达式, views视图函数,参数,别名),
        ]
        
      • 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),
          ]
          
    • 参数说明

      1. Django路由系统匹配URL路径的时候是从上到小按照注册顺序来的

      2. django的路由系统只匹配URL路径,不匹配域名,端口和URL参数

      3. 分组匹配----》相当于给视图函数传位置参数

      4. 分组命名匹配 ----》相当于给视图函数传关键字参数

        1. (?P<name>pattern) 其中name为组的名称,pattern为匹配的模式
        • 注意:分组匹配和分组命名匹配不能混合使用
    • 实例:为获取某出版社某年某月出版的书的数量,

      • # urls.py中
        from app01 import views
        urlpatterns = [
            # url(r"^book_amount/([0-9]{4})/([0-9]{2})/$", views.book_list),      # 分组匹配
            url(r"^book_amount/(?P<year>[0-9]{4})/{?P<month>[0-9]{2}/$", views.book_list)     # 分组命名匹配
        ]
        
      • # views.py中
        def book_list(request,year,month):
        	print(year,month)    #对于匹配的值可以打印,类型为字符串类型
        
      • 对于使用分组命名匹配,在views.py中可以使用默认参数

      • def page(request, num="1"):
            pass
        
    • 给URL匹配模式器名字

      • name = "别名" ---》 起别名的目的是为了反向解析URL的时候有依据
        • 起别名的作用是:动态匹配跳转的页面,直接通过名字name可以找到,
      • 5mJArq.png
    • 通过名字反向解析

      • 在视图函数中

        • from django.urls import reverse
          reverse("别名")
          reverse("名称空间:别名", kwargs={"k1":v1})
          

          5mJNhR.png

      • 模板语言中

        • 在前端a标签中,可以通过下列代码进行跳转页面

        • {% url "别名" "参数" %}
          
        • 5mJf1y.png

    • namespace模式

      • 当项目很大,页面很多的时候,项目下urls.py中就会出现混乱,复杂,所以要用namespace模式,来进行分块匹配

      • from django.conf.urls import url, include
        from teacherapp import urls as teacherurls
        urlpatterns = [
            url(r"^teacher/", include(teacherurls, namespace="teacher")),   # 二级目录
        ]
        
      • 5mZ3BK.png

原文地址:https://www.cnblogs.com/yuncong/p/9944168.html