接上一篇博客【Python笔记之Django初体验2】
本例是通过总路由,传递部分只变化部分的参数,
比如http://127.0.0.1:8000/book/page-*/ ,变化部分仅仅是*的位置,星号代表本例的书的页码号。
一、总路由/urls.py的写法:
url(r'^book/(?:page-(?P<xpagenumber>\d+)/)$', tv.do_param2), 再次提醒,xpagenumber为视图函数里的参数名,本文件/urls.py和app下的views中do_param2方法传递的参数名必须完全一致,因为本身路由调用的就是views中的方法,参数名不一样必然出错。
from django.contrib import admin
from django.urls import path
from django.conf.urls import url, include
from teacher import views as tv, teacher_url
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^normalmap', tv.do_normalmap),
url(r'^withparam/(?P<year>[0-9]{4})/(?P<month>[0,1][0-9])', tv.withparam),
url(r'^teacher/', include(teacher_url)),
url(r'^book/(?:page-(?P<xpagenumber>\d+)/)$', tv.do_param2),
]
二、App视图/teacher/views.py的写法:
定义方法
def do_param2(request, xpagenumber):
return HttpResponse("page number is {0}".format(xpagenumber))
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def do_normalmap(request):
return HttpResponse('Hello X World')
def withparam(request, year, month):
return HttpResponse('This is with param {0},{1}'.format(year, month))
def do_app(request):
return HttpResponse('这是子路由显示出来的内容')
def do_param2(request, xpagenumber):
return HttpResponse("page number is {0}".format(xpagenumber))
三、注意,本例没有用到子路由。请仔细看总路由没有用到include。不要搞糊涂了。
四、打开URL看效果:
启动Django的web服务器,D:\ProgramCode\Python\test002\Xdjango>python manage.py runserver回车。
http://127.0.0.1:8000/book/page-100/ 输出结果为:page number is 37213690
http://127.0.0.1:8000/book/page-13671/输出结果为:page number is 13671