路由配置
首先,开始路由配置之前,在主目录下创建views.py的视图文件
写入视图函数
from django.http import HttpResponse def test(request): return HttpResponse('Hello World!!!')
一、path
最简单的路由
from django.contrib import admin from django.urls import path
from .views import * urlpatterns = [ path('admin/', admin.site.urls), path('test/',test), ]
注意:需要导入views.py
传参
from django.http import HttpResponse def test(request,course): return HttpResponse('Hello World!!!')
urlpatterns = [ path('admin/', admin.site.urls), path('test/<course>/',test), ]
这时浏览器访问的时候url为 127.0.0.1/test/参数
传不定长参数
如果在主路由设置路由为
path('book/',include('book.urls'),{'swich':'true'}),
那么就可以进行批量传参,子路由访问必须加参数,否则报错
但是有时候需要限制参数的类型
所以在urls.py里可以设置路由为 path('test/int:<course>/',test), 即限制为整数传参
python自带的很多默认的转换器
- str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
- int,匹配正整数,包含0。
- slug,匹配字母、数字以及横杠、下划线组成的字符串。
- uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
- path,匹配任何非空字符串,包含了路径分隔符
二、re_path
需要用到的包 from django.urls import path,re_path
views.py
def test1(request): return HttpResponse('这是用的re_path设置的') def test2(request,yy): print(yy,type(yy)) return HttpResponse('hello %s'%yy)
urls.py
re_path('^hello/$',views.test1), #精确查找 re_path('^hello/(?P<yy>[0-9]+)/',views.test2), #[0-9]表示数字,+表示0-无穷,?p表示命名
re_path只在Django 1.x里使用广泛,在Django 2.x里,path更加简洁高效
三、include
include时将路由分配到APP里面
新建APP python manage.py startapp app名 ;
注册APP,主目录下的settings.py
INSTALLAPP = {
'app名',
}
主目录下的urls.py
from django.contrib import admin
from django.urls import path,include
from .views import *
urlpatterns = [
path('admin/', admin.site.urls),
path('book/',include('book.urls')),
]
APP目录下的urls.py
from django.urls import path
from . import views
urlpatterns = [
path('test/',views.test),
]
APP下的视图函数,函数体 return HttpResponse("Book's test!")
届时,该视图的URL为 127.0.0.1:8000/book/test
四、页面重定向
当某一个页面过时不用的时候,再次访问旧路由的时候能够自动跳转到新路由的页面
先写两个视图
def old(request): return HttpResponse('This is old web !!') def new(request): return HttpResponse('This is new web !!')
并配置路由
urlpatterns = [ path('old/',views.old), path('new/',views.new), ]
使之能够正常访问
法一
届时需要做跳转,先导入需要的包 from django.shortcuts import redirect
def old(request): return redirect('/book/new/') # return HttpResponse('This is old web !!') def new(request): return HttpResponse('This is new web !!')
然后再次访问旧的路由
会发现当访问旧路由的时候,自动跳转到了新路由
法二
使用name
更改子路由的分配 path('new/',views.new,name = 'news'),
更改视图函数,需导包 from django.shortcuts import reverse
def old(request): return redirect(reverse('news')) # return HttpResponse('This is old web !!') def new(request): return HttpResponse('This is new web !!')
访问旧路由
五、模板渲染
- 到主目录下的settings.py下修改TEMPLATES 'DIRS': [os.path.join(BASE_DIR)],
- 创建一个名为templates普通文件夹并注册,在该文件夹路径下创建APP名的文件夹,下级创建HTML文件
- 导包 from django.shortcuts import render
- 创建视图 return render(request,'book/index.html')
- 配置路由 path('index/',views.index),
看看效果
成功渲染!!!