(一)在URL中使用变量的方式
1.传递一个参数
如:views.py
#说明已经创建了名为book的APP
From django.http import HttpResponse
def book (request):
return HttpResponse('图书首页')
def book_detail (request,book_id): # book_id就是传递的参数
#可以从数据库中根据book_id提取这个图书的信息
return HttpResponse(text)
Urls.py
From book import Views #这里的book是创建的APP名字
url = [
path('admin/',admin.site.urls),
path('book/',Views.book) #此处的book为views.py中定义的函数
path('book/detail/<book_id>/',Views.book_detail)
#<book_id>一定要和views.py中的参数一样
path(‘’,index) #定义默认的首页面,可以在views.py中定义相应的函数
]
2.传递多个参数
如:views.py
#说明已经创建了名为book的APP
From django.http import HttpResponse
def book (request):
return HttpResponse('图书首页')
def book_detail (request,book_id,category_id):
text = "您获取的图书id是 %s, 图书分类是%s" % (book_id,category_id)
return HttpResponse(text)
Urls.py
From book import Views #这里的book是创建的APP名字
url = [
path('admin/',admin.site.urls),
path('book/',Views.book) #此处的book为views.py中定义的函数
path('book/detail/<book_id>/<category_id>/',Views.book_detail)
#这里的URL需要传递两个参数即:URL地址/参数1/参数2
#<book_id>一定要和views.py中的参数一样
path(‘’,index) #定义默认的首页面,可以在views.py中定义相应的函数
]
(二)查询字符串方式
网址里面以?方式结尾的就是使用了get的请求!
如:views.py
#说明已经创建了名为book的APP
From django.http import HttpResponse
def author_detail (request): #不需要写参数
author_id = request.GET.get('id')
#和上面写法一样author_id = request.GET['id']
text = '作者的id是: %s' % author_id
return HttpResponse(text)
Urls.py
From book import Views #这里的book是创建的APP名字
url = [
path('admin/',admin.site.urls),
path('book/author/',Views.author_detail)
]
(三)无参数情况
配置URL及其视图如下:
views.py
def hello(request):
return HttpResponse("Hello World")
Urls.py
From book import Views #这里的book是创建的APP名字
url = [
path('admin/',admin.site.urls),
path('hello/',Views.hello)
]
访问http://127.0.0.1:8000/hello,输出结果为“Hello World”
(四) 传递一个参数
views.py
def helloParam(request,param1):
return HttpResponse("The param is : " + param1)
Urls.py
From book import Views #这里的book是创建的APP名字
url = [
path('admin/',admin.site.urls),
path('plist/<parm>',Views.helloParam)
]
访问http://127.0.0.1:8000/plist/china,输出结果为”The param is : china”
(五) 通过传统的”?”传递参数
例如,http://127.0.0.1:8000/plist/?p1=china&p2=2012,url中‘?’之后表示传递的参数,这里传递了p1和p2两个参数。
通过这样的方式传递参数,就不会出现因为正则匹配错误而导致的问题了。在Django中,此类参数的解析是通过request.GET.get方法获取的。
配置URL及其视图如下:
views.py
def helloParams(request):
p1 = request.GET.get('p1')
p2 = request.GET.get('p2')
return HttpResponse("p1 = " + p1 + "; p2 = " + p2)
Urls.py
From book import Views #这里的book是创建的APP名字
url = [
path('admin/',admin.site.urls),
path('plist/<parm>',Views.helloParam)
]
访问:http://127.0.0.1:8000/plist/?p1=china&p2=2012
输出结果为”p1 = china; p2 = 2012″