4.6、Django - URL之URL分层模块化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012111465/article/details/84929903

1、URL分层模块化

当网页中内容较多,将网页中的URL全部写在一个文件中,必然不好管理 。

默认的APP下是不含url.py 文件(如下图douAPP项目下的APP为douBook的内容) ,可以通过在每个APP下构建url.py 文件 ,解决URL分层模块化管理。

在这里插入图片描述

2、示例

在douAPI项目APP为douBook的views.py中:

from django.shortcuts import render

# Create your views here.
#
from django.http import HttpResponse

def book_info(request):
    return HttpResponse("图书详情")

def book_info_detail(request,book_id):
    # 从数据库中拿book_id,省略
    your_book_id = 'your book id is :{book_id}'.format(book_id = book_id)
    return HttpResponse(your_book_id)

# 注意book_author_detail函数与book_info_detail(request,book_id)的区别,前者的除了request参数写在括号内,其余不写,在函数体内部体现
def book_author_detail(request):
    # 从数据库中拿id
    author_id = request.GET.get('id') # 或者author_id = request.GET['id']
    content = "Author's id of the book is : {input_id}".format(input_id = author_id)
    return HttpResponse(content)


def book_publisher_id(request,publisher_id):
    content = "Publisher's id of the book is : {input_id}".format(input_id = publisher_id)
    return HttpResponse(content)

在项目douAPI下的url.py中:

from django.urls import path,include
from douBook import views
from django.urls import converters

urlpatterns = [
    # include中的路径是相对于项目所在的目录
    path('douBook/', include('douBook.urls')),# 将douBook开头的链接转到APP为douBook的urls.py匹配
]

在项目douAPI下的APP为douBook的APP下的url.py中:

from django.urls import path
from douBook import views
from django.urls import converters

urlpatterns = [
    path('', views.book_info),
    path('detail/<book_id>/', views.book_info_detail),
    path('author/', views.book_author_detail),
    path('publisher/<publisher_id>/', views.book_publisher_id),


]

结果如下:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、总结

1、url模块化是为了方便管理,即将每个APP中各建立自己的urls.py文件 。
2、在项目下有一个总的urls.py文件,这个文件的主要作用是将每个APP去找各自的urls.py文件,在该文件中,应该使用include函数包含urls.py,且是相对于项目路径 。
3、在APP中的urls.py文件,所有的匹配也应该放在urlpatterns中 。
4、最终的url是根据主url.py和APP的url.py进行拼接的,因此,不可多加或少加/

猜你喜欢

转载自blog.csdn.net/u012111465/article/details/84929903
4.6