Django URL传递参数的方法总结

(一)在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″

上一篇:Django2.x - 模板过滤器


下一篇:django_url路由控制系统