django 3.2.13
一、路由
1.1 urls.py
基础:
# 主urls文件
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),// 读取根目录的路由
path('index/',include('app1.urls'))// 读取app目录里面的路由(include就是用来包含app目录里面的内容)
]
# app里面的urls文件
from django.urls import path
from app1 import views
urlpatterns = [
path('index/',views.index,name='index')
# name会在后面的模板用到如<a herf="{% url "index" ‘数据A’ ‘数据B’%}"></a>(里面就相当127.0.0.1/a/index/数据A/数据B)
# 注意使用name有不好的地方就是可能会出现多个路由重复的情况,解决在每个app下添加单独的app_name = 'index'
]
1.2 路由匹配变量
<int:age>
<str:name>
<slug:title>
(可以匹配任何ASCII码、连接符和下划线,如88-ak)<uuid:id>
(uuid格式的,如a3d68fa7-e6a1-49f8-ab0d-e7bd7da82672)可使用正则表达式
def index(request,id):
print(id) # 即可打印出来uuid
return render(request,'index.html')
1.3 路由参数
name='indexb'
:配合app_name使用app_name='indexa'
:与name一同使用,用法:indexa:indexb
这两个参数主要可用于类似:<a herf="{% url "indexa:indexb" ‘数据A’ ‘数据B’%}"></a>(里面就相当127.0.0.1/a/index/数据A/数据B)
from django.urls import path
from testWeb import views
app_name='index'
urlpatterns = [
path('<str:id>',views.index,name='index')
]
1.4 路由反向解析
导入:
from django.urls import resolve
from django.shortcuts import reverse
reverse("indexa:indexc")
:解析出路由地址,此例返回结果为/logggg
(地址设有变量写入参数args
(列表方式)或者kwargs
(字典方式),写入数据)resolve(reverse("indexa:indexc"))
:返回结果为该路由的详细信息,如下图
from django.urls import path
from testWeb import views
app_name='indexa'
urlpatterns = [
path('<str:id>',views.index,name='index'),
path('/logggg',views.go,name='indexc')
]
1.5 路由重定向
导入:
from django.views.generic import RedirectView
from django.shortcuts import redirect
- 路由里面重定向
urlpatterns=[
path('index/',views.index),
path('go/',RedirectView.as_view(url="/"))
]
- 视图函数重定向
def index(request):
return redirect('/go')