URL映射
URL映射:
视图写完后,要与URL进行映射,也即用户在浏览器中输入什么url
的时候可以请求到这个视图函数。在用户输入了某个url
,请求到我们的网站的时候,django
会从项目的urls.py
文件中寻找对应的视图。在urls.py
文件中有一个urlpatterns
变量,以后django
就会从这个变量中读取所有的匹配规则。匹配规则需要使用django.urls.path
函数进行包裹,这个函数会根据传入的参数返回URLPattern
或者是URLResolver
的对象。示例代码如下:
from django.contrib import admin
from django.urls import path
from book import views
urlpatterns = [
path('admin/', admin.site.urls),
path('book/',views.book_list)
]
映射需使用path函数或者re_path函数包装。
URL中添加参数:
方法一:采用在url中使用变量
在path第一个参数中,使用"<参数名>"的方式传递参数。如:https://www.jianshu.com/p/a5aab9c4978e
后面的a5aab9c4978e
就是这篇文章的id
,那么可以写成https://www.jianshu.com/p/<id>
,其中id就是文章的id。在试图函数中也需要写一个参数,视图函数和url参数名称必须保持一致,不然无法找到这个参数,另外url中可以传递多个参数,示例代码如下:
#url.py下的代码:
from django.contrib import admin
from django.urls import path
from book import views
urlpatterns = [
path('admin/', admin.site.urls),
path('book/<参数名>/',views.book_detail)
]
#视图函数下的代码:
from django.http import HttpResponse
def book_detail (request,参数名):
变量='内容:%s'%(参数名)
return HttpResponse(变量)
例子:在app.views中添加视图函数
方法二:采用查询字符串方式:
url中有"?xxx=xxx"则采用的是查询字符串的方法传递参数的,如:www.baidu.com/s?wd=python。这类方法只需在视图函数中使用'request.GET.get('参数名称')'。示例代码如下:
#视图函数下代码:
from django.http import HttpResponse
def movie_detail(request):
movie_id=request.GET.get('参数名')
text='内容:%s' % movie_id
return HttpResponse(text)
#url下代码:
urlpatterns = [
path('admin/', admin.site.urls),
path('movie/',views.movie_detail)
]
例子:
需要注意:url后接的变量名必须和 "request.GET.get('参数名')" 的参数名一致,如下图:
如果 "movie/" 后没有接任何字符或接的不是 "?id=xxx",则会返回: