A-2 django的url规则

当一个请求到达正则表达式

  首先到项目根目录下的urls.py查找路由规则django

  按顺序匹配urlapp

  一旦匹配,django导入并调用给定的视图post

  若是没有匹配到或者出错,返回404ui

path(route,view,kwargs=None,name=None)url

  route:字符串url规则spa

  view:视图code

  kwargs:额外参数,传递给view,必须是一个字典blog

  nameurl的命名 通常配合须要返回到一个视图所对应的url时用到ci

url捕获参数

1.在视图中定义detail方法,并定义pk参数

def detail(request,pk): return HttpResponse("捕获的参数为 %s" % pk)

2.urls.py中配置须要捕获参数的url

urlpatterns = [ #使用<>指定须要获取参数名 
    # 与方法中的参数名一致 
     path('detali/<pk>/',views.detail()) ]

3.访问urlhttp://127.0.0.1:8000/detali/45/

页面显示:捕获的参数为 45

路径转换器

  经常使用的类型转换器

  str:匹配除 / 以外的全部字符串

  int:匹配任意整数

  slug:匹配任意ascii字符,加上连字符和下划线

  uuid:格式id

  path:匹配任意非空字符

  urlpatterns = [    #将传递的参数转换为int类型    #如何传递的参数不能转换为int类型就会报错    

  path('detali/<int:pk>/',views.detail) ]

正则表达式re_path

1在视图中定义students方法,并调用年、月参数

def students(request,year,month): return HttpResponse("%s年%s月" %(year,month))

2.使用re_path定义url路径

urlpatterns = [ #使用正则表达式对传递的参数进行过滤 
re_path(r'students/(?P<year>\d{4})/(?P<month>[0-9]|1[0-2])/', views.students) ]

Django搜索url

1.只搜索路径部分,跟参数,以及请求方法(getpost)无关

2.同一个url能够匹配getpost

传递额外参数

1.在视图中定义方法

def detail(request,pk,status): return HttpResponse("捕获的参数为 %s" % pk)

2.配置url

urlpatterns = [ #kwargs必须是字典
    #kwargs中的status在detail方法中存在
    #若是传递的参数名和kwargs中的键一致,以kwargs为准
    path('detail/<int:pk>/',views.detail,kwargs={"status":True}) ]

include

1.include,一个urls.py中引用另外一个urls.py

from django.contrib import admin from django.urls import path,include urlpatterns = [ path('admin/', admin.site.urls), #项目目录中的urls.py引用teacher中的urls.py
    path('teacher/',include('teacher.urls')) ]

url命名

1.在urls.py定义app_name

2.指定url name

from django.urls import path,re_path from . import views app_name = "teacher" urlpatterns = [ path('index/',views.index), path('login/',views.login,name="login"), ]

3.index重定向到login

from django.shortcuts import reverse,redirect from django.http import HttpResponse def index(request): url = reverse("teacher:login")  #appname:urlname
    return redirect(url) def login(request): return HttpResponse("登陆页面")
相关文章
相关标签/搜索