url路由配置及渲染方式

Posted taoge188

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了url路由配置及渲染方式相关的知识,希望对你有一定的参考价值。

-- django的url规则

django的路由系统
当一个请求来到时
1.首先到项目目录下的urls.py (根URLconf模块)中,查找路由规则
2.根URLconf模块,里面定义了urlpatterns变量
3.urlpatterns是一个(django.urls.path,django.urls.re_path 对象)列表
4.按顺序运行每个url模式。在第一个匹配的模板停止
5.一旦匹配,django 导入并调用给定的视图
6.如果中间出错,或者没有匹配到,返回404

 

-- path方法,捕获参数,路径转换器  

  -path(route,view,kwargs=None,name=None)
  -route 是一个字符串的url规则
  -view 是一个视图
  - kwargs 额外参数,传递给view,必须是一个字典
  - name url的命名

  -- 在url中捕获参数
  使用`<变量名>`可以捕获url中的值传递给视图
  ** 捕获的值是 字符串

访问学生详情:

views.py

def detail(request,pk):
    return HttpResponse(学生id为%s的详情页%pk)

urls.py中添加

path(detail/<int:pk>/, views.detail),   #int为对对象pk的约束条件,必须为整数。路径转换器

结果如图:

技术图片

第二种解释,`<变量名>`可以捕获url中的值传递给视图,并且有多个值时是一一对应

views.py如下:

def detail(request,slug,pk):
    return HttpResponse(学生id为%s的详情页%pk)

urls.py

path(detail/<int:pk>/<slug>/, views.detail),

结果如图:

技术图片

3.使用别的符号,也可以访问例如:-

path(detail/<int:pk>-<slug>/, views.detail),

技术图片

常用的转换器:
  -- str 匹配除了‘/’路径之外的所有字符串
  -- int 匹配任意整数
  -- slug 匹配任意ascii字符,加上连字符和下划线
  -- uuid 格式化id
  -- path 匹配任意非空字符

-- 使用正则表达式 re_path(route,view,kwargs=None,name=None)
python 中正则表达式的分组命名 格式:(?P<name>pattern)  分组按照关键字参数,不分组按照位置参数

 如上面所示,输入的变量没有限制,比如年份是4位数字,月份为1-12的数字。

views.py

def student(request,year,mon):
    return HttpResponse(%s年 %s报名的学生%(year,mon))

urls.py中

   re_path(student/(?P<year>d{4})/(?P<mon>d[1-12])/, views.student),  #两种方法都可以
    # re_path(‘students/(?P<year>d{4})/(?P<mon>[0-9]|1[0-2])/‘, views.student),

结果如下:

技术图片

按照位置参数,容易出问题

urls.py

  re_path(student/(d{4})/(d[1-12])/, views.student),

 views.py

def student(request,mon,year):
    return HttpResponse(%s年 %s报名的学生%(year,mon))

结果如下:

技术图片

- django 搜索的是什么?
只搜索路径,不搜参数,不搜索请求方法
同一个url可以匹配到get post

 

以上是关于url路由配置及渲染方式的主要内容,如果未能解决你的问题,请参考以下文章

Python(四十六)url路由分配及模板渲染方式

路由分配及模板渲染

django路由分配及模板渲染

VSCode自定义代码片段11——vue路由的配置

VSCode自定义代码片段11——vue路由的配置

VSCode自定义代码片段11——vue路由的配置