第2节----Django框架之url路由配置及模板渲染
本章节分为2个大的部分
urls.py代码
from django.contrib import admin
from django.urls import path, re_path, include
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index1/', views.index1),#path不传参数
path('index2/<int:pk>', views.index2),#path传参数
re_path(r'^index3/$', views.index3),#re_path不传参数
re_path(r'^index4/(?P<pk>\d+)', views.index4),#re_path传参数
re_path(r'^index5/(\d+)/$', views.index5),#re_path传参数
path('index6/', views.index6,{"a":1}),#kwargs传参
path('student/', include("student.urls")),#include注册
path('index8/', views.index8,name='old'),#name使用
path('index9/', views.index9,name='new'),
path('index10/<int:xx>', views.index10,name='渲染模板'),
]
views.py代码
from django.http import HttpResponse
from django.shortcuts import render,redirect,reverse
from django.template.loader import get_template
def index1(request):
return HttpResponse("<h1>这是path不带参数<h1/>")
def index2(request,pk):
return HttpResponse("<h1>这是path带参数:%s<h1/>" % pk)
def index3(request):
return HttpResponse("<h1>这是一个re_path不带参数<h1/>")
def index4(request,pk):
return HttpResponse("<h1>这是re_path带参数:%s<h1/>" % pk)
def index5(request,pk):
return HttpResponse("<h1>这是<h1/>")
def index6(request,**kwargs):
if kwargs.get("a")==1:
return HttpResponse("<h1>这是kwargs<h1/>")
else:
return HttpResponse("哈哈")
def index8(request):
return redirect(reverse("new"))
# return HttpResponse("<h1>这是一个oldDjango项目<h1/>")
def index9(request):
return HttpResponse("<h1>这是一个新的项目<h1/>")
def index10(request,xx):
t = get_template("student/1.html")
#方式1
# html = t.render()
# return HttpResponse(html)
# 方式2
return render(request,"student/1.html",{"qqq" : "华五"})
1.index
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1><p>"欢迎使用渲染"</p> </h1> {{qqq}} </body> </html>
例子:http://127.0.0.1:8000/hello/ URL结构: schema://host[:port#]/path/.../[?query-string][#anchor] schema:指定使用的协议(例如:http, https, ftp) host:Http服务器的IP地址或者域名 port:端口号,http默认是80端口 path:访问资源的路径 query-string:发送给http服务器的数据 anchor:锚点
2.配置url(两种方式:path,re_path)
需要导入from django.urls import path, re_path
path使用格式:
path("匹配规则",对应的视图views)
re_path使用格式
re_path(r"正则表达式",对应的视图views)
参数如何捕获?两种方法:
1.<int:pk>格式,int可换成str,slug,uuid
path('index2/<int:pk>', views.index2)
2.(?P<pk>\d+)格式
re_path(r'^index4/(?P<pk>\d+)', views.index4)




3.kwargs的使用:
urls.py中写入:
path('index6/', views.index6,{"a":1}),#kwargs传参
views.py中写入:
def index6(request,**kwargs): if kwargs.get("a")==1: return HttpResponse("<h1>这是kwargs<h1/>") else: return HttpResponse("哈哈")
结果:
4.include注册app
urls.py中写入:
path('student/', include("student.urls")),#include注册使用student下的Urls
app中写入urls写入:
path('index7/', views.index7,{"a":1}),#path不参数
app中写入views.py写入:
def index7(request,**kwargs):
if kwargs.get("a")==1:
print(datetime.datetime.now())
return HttpResponse("这是include")
结果:

5.重定向用于更新了网址啥的跳转
urls.py中写入:
path('index8/', views.index8,name='old'),#name使用用于重定向
path('index9/', views.index9,name='new'),
views.py中写入:
def index8(request):
return redirect(reverse("new"))
# return HttpResponse("<h1>这是一个oldDjango项目<h1/>")
结果:


二.渲染模板
思路:用get_template()函数获取指定的html路径,可以是templates下的文件路径,也可以是app下的templates下的文件路径,前者优先,若前者没搜索到则继续向下搜索知道搜索到为止。
urls.py中写入:
path('index10/<int:xx>', views.index10,name='渲染模板'),
views.py中写入:
def index10(request,xx):
t = get_template("student/1.html")#注意在templates下创建了student,1.index文件
html = t.render({"qqqq":xx})#{"qqqq":xx}不知道有啥用
return HttpResponse(html)
结果:



浙公网安备 33010602011771号