Python笔记之Django传参(斜线后面半部分传参)

接上一篇博客【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

猜你喜欢

转载自blog.csdn.net/xoofly/article/details/86662307