网站怎么不要钱自己做,广州微网站建设平台,北海市高德小学简介,企业网站做的比较好Router介绍 在实际开发过程中#xff0c;一个Django项目会包含很多的app,这时候如果我们只在主路由里进行配置就会显得杂乱无章#xff0c;所以通常会在每个app里#xff0c;创建各自的urls.py路由模块#xff0c;然后从根路由出发#xff0c;将app所属的url请求#xff…Router介绍 在实际开发过程中一个Django项目会包含很多的app,这时候如果我们只在主路由里进行配置就会显得杂乱无章所以通常会在每个app里创建各自的urls.py路由模块然后从根路由出发将app所属的url请求全部转发到相应的us.py模块中。而这个从主路由转发到各个应用路由的过程叫做路由的分发 路由匹配
# 使用ur1给视图函数传参数path(index/,index)path(detail/int:id/,detail)
# 给ur1取别名那么在使用此ur1的地方可以使用别名。比如path(index/,index,nameindex)path(detail/int:id/,detail,namedetail)命名空间 在实际应用中Django中可能存在多个应用程序每个应用程序都可能有自己的路由模块。为了防止路由冲突Django提供了命名空间(namespace)的概念。命名空间是一种将路由命名为层次结构的方式使得在查询路由时可以限定在该命名空间内。 # 在根路由中可以设置命名空间path(app/,include((App.urls,App),namespaceApp))反向解析 Django路由反向解析是一个非常重要的功能它可以让我们在代码中使用路由别名替代URL路径在修改URL时避免代码中的硬编码依赖同时也可以提高可读性和可维护性。 为什么叫反向解析呢 正常的路由匹配都是通过path路由规则一步一步找到.html文件。而反向解析因为有路由别名的原因是直接从.html文件找到路由规则的 # 在视图函数中反向解析ur1:from django.shortcuts import render,redirect,reversedef buy(request):return redirect(reverse(index))return redirect(reverse(detail,args[2]))return redirect(reverse(detail,kwargs{id:2}))#在templates中使用别名{%url detail stu.id %}# 使用命名空间
# 指定命令空间后使用反向解析时需要加上命名空间比如
# 1.在视图函数中return redirect(reverse(App:index))
# 2.在templates中{% ur1 App:index %}路由使用
创建名App的应用 App/models.py
from django.db import models# Create your models here.
class UserModels(models.Model):namemodels.CharField(max_length30)agemodels.PositiveIntegerField() # 非负数App/urls.py
from django.urls import path
from App.views import *urlpatterns[# 首页path(index/,index)
]urls.py
from django.contrib import admin
from django.urls import path,include
from App.views import *urlpatterns [# 1、直接使用根路由path(user/,index),# 2、使用子路由,使用includepath(user/,include(App.urls)),# 3、使用子路由,使用include命名空间namespace# 使用命名空间时注意include函数有两个参数默认第二个参数namespace为None# 当传命名空间的时候第一个参数要是元组类型的并且要加上App的名字一般和应用的名字一样path(user/,include((App.urls,App),namespaceApp)),path(admin/, admin.site.urls),
]页面跳转
当路由规则使用了命名空间反向解析也只能使用带命名空间的方式 创建userlist.html使用index.html进行后端跳转 index.html
!DOCTYPE html
html langen
headmeta charsetUTF-8title首页/title
/head
bodyh2首页/h2hr{# 1、URL路径 #}{# 当访问这个路径/user/userlist 相当于会访问后端的视图函数userlist()来到urls.py文件对userlist的路由规则 #}a href/user/userlisturl路由的方式:进入用户列表页面/ahr{# 2、反向解析 #}{# userlist 是path路由的name值 #}a href{% url userlist %}反向解析的方式:进入用户列表页面/ahr{# 反向解析带命名空间 #}a href{% url App:userlist %}反向解析带命名空间的方式:进入用户列表页面/a
/body
/htmlviews.py添加
# 用户列表
def usr_list(request):usersUserModels.objects.all()return render(request,user_list.html,{users:users})路由传参
单个参数
创建userdetail.html
!DOCTYPE html
html langen
headmeta charsetUTF-8title用户详情/title
/head
bodyh2用户详情/h2hr用户姓名{{ user.name }}hr用户年龄{{ user.age }}
/body
/html修改user_list.html
a href{% url userdetail user.id %}通过用户id拼接从而当通过反向解析跳转到path匹配路径时会将user.id 传入路由
!DOCTYPE html
html langen
headmeta charsetUTF-8title用户列表/title
/head
bodyh2用户列表/h2hrul{% for user in users %}li a href{% url userdetail user.id %}{{ user.name }}-{{ user.age }}/a/li{% endfor %}/ul
/body
/htmlviews.py添加
# 用户详情
def user_detail(request,uid):print(uid:,uid)# 通过主键获取一个对象的值userUserModels.objects.get(pkuid) # pk: primary key 主键return render(request,userdetail.html,{user:user})usrls.py
from django.urls import path
from App.views import *urlpatterns[# 首页path(index/,index),# 用户列表path(userlist/,usr_list,nameuserlist),# 用户详情path(userdetail/int:uid/,user_detail,nameuserdetail),
]多个参数
要和路由中的参数名一致名字对应赋值理解为关键字传值 views.py添加
# 多个参数
def user_ab_viem(request,a,b):return HttpResponse(fa:{a}-b:{b})
# 要和路由中的参数名一致名字对应赋值
def user_ba_viem(request,b,a):return HttpResponse(fa:{a}-b:{b})urls.py
from django.urls import path
from App.views import *urlpatterns[# 首页path(index/,index),path(userlist/,usr_list,nameuserlist),path(userdetail/int:uid/,user_detail,nameuserdetail),path(userab/int:a/int:b/,user_ab_viem,nameuserab),path(userba/int:a/int:b/,user_ab_viem,nameuserba),
]