首
Django中视图的作用是在链接与视图函数之间做映射。创建完Django项目后,同名文件夹下的urls.py为项目的总路由(/project/project/urls.py):
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
其中包含一条路由“admin”,映射的视图函数为admin.site.urls。当访问//localhost/admin/时,会打开Django自带的后台管理界面。
配置路由
创建app1,并在views.py中编写一个视图函数,如:
from django.shortcuts import render
# Create your views here.
def index(request):
return render(request, '1/index.html')
视图内容是将index.html模板返回,那如何编写访问index视图的路由呢?修改/project/project/usls.py:
from django.contrib import admin
from django.urls import path
from app1 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index, name="app1_index"),
]
在urlpatterns中添加路由规则即可,path(路由,视图函数,别名)。别名建议使用“app_func”的起名方式,避免app间url冲突。(别名在重定向时有一定作用)
路由包含
一个项目可能会包含多个app,每个app又包含多个功能,每个功能又有多个路由,如果将所有路由映射全部放在/project/project/urls.py中会显得杂乱,不利于后期扩展。可以通过路由包含逐级配置路由。如项目中有两个app,可通过include进行包含设置:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path("app1/", include("app1.urls")),
path("app2/", include("app2.urls")),
path('admin/', admin.site.urls),
]
app1中urls.py,可以配置app1中的路由:
from django.urls import path
from app1 import views
urlpatterns = [
path("index/", views.index),
]
当访问//localhost/app1/index/时,首先会映射到app1/这个路由,之后会将其交给app1的urls路由文件继续进行子路的映射。
函数 include() 允许引用其它 URLconfs。每当 Django 遇到 include() 时,它会截断与此项匹配的 URL 的部分,并将剩余的字符串发送到 URLconf 以供进一步处理。——Django文档
如果app1中有多个功能,可以继续分。app中创建urls文件夹,其下根据不同功能创建子路由文件夹,例如func1和func2,分别在其下创建各功能的路由文件。而app级路由文件则对func1和func2进行子路由的映射。
路由参数
如果我们编写一个博客网站,链接可能是这样的//localhost/abc/1/,表示abc这个人写的第一篇文章,那么第二篇文章链接应该是//localhost/abc/2/,如果每写一篇文章都设置一个路由,那我们的路由文件会及其复杂繁琐。此时,可以将路由的作者文章部分当做一个参数进行路由配置。
(注,这里的参数不是GET请求的参数,是以Django为出发点解析路由的一个概念名词,如果是请求参数,链接应该是//localhost/pages?user=abc&num=1)
urlpatterns = [
path('abc/<int:num>', views.index),
]
参数规则<类型 : 名称>,如上一条路由会匹配所有abc后接数字(非负)的路由,并将数组存储在num参数中。
除了int还有str,slug(类似char)和uuid类型,使用方式与int类似。
如果路由过于复杂,可以通过re_path函数进行正则匹配,具体使用方式留给大家去查。文章来源:https://www.toymoban.com/news/detail-811481.html
from django.urls import re_path
from app1 import views
urlpatterns = [
re_path(r"abc/(?P<num>\d+)", views.index),
]
接收路由参数
视图接收路由参数的方式很简单,增添同名参数即可:文章来源地址https://www.toymoban.com/news/detail-811481.html
from django.shortcuts import render
# Create your views here.
def index(request, num):
print(num)
return render(request, '1/index.html')
到了这里,关于Django笔记(三):路由urls的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!