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映射

URL映射

URL映射

方法二:采用查询字符串方式:

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映射

URL映射

需要注意:url后接的变量名必须和 "request.GET.get('参数名')" 的参数名一致,如下图:

URL映射

如果 "movie/" 后没有接任何字符或接的不是 "?id=xxx",则会返回:

URL映射URL映射