关于django中的path函数和include函数

本文详细介绍了Django中的path和include函数在URL路由配置中的作用,包括路径映射、视图关联、命名URL、参数处理以及URL模式的嵌套结构,帮助读者掌握Django项目中URL配置的核心原理。
摘要由CSDN通过智能技术生成

关于django中的path函数和include函数

path: 这是Django的URL路由系统中的一个函数,用于将一个URL模式映射到一个视图函数或类。

path(route, view, kwargs=None, name=None)
  • route: 一个字符串,表示 URL 的模式或者路径。例如 '' 代表根路径,'articles/' 代表路径前缀为 articles/ 的 URL。
  • view: 当 URL 被访问时调用的视图函数或基于类的视图。
  • kwargs: 一个可选的字典,包含要传递给视图函数的额外关键字参数。
  • name: 一个可选的字符串,用于给这个 URL 路由命名,这样在模板和视图中可以通过这个名字反向解析 URL。

1-关于路径:

path("", views.index, name="index")

这里的路径是一个空字符串,代表这跟路径(“跟路径”通常指的是文件或目录结构的起始点。在Unix和Linux系统中,根路径通常表示为“/”,而在Windows系统中,根路径可能是“C:\”或其他驱动器字母)

解释一下上述代码:

当用户访问一个IP地址或者网站的时候,一般第一页显示的是根URL,根路径对应的URL就是根URL啦,当用户访问这个的时候,django就会调用views.py中的index这个函数,

path('admin/', admin.site.urls),

 这行代码是URL配置的一部分,用于将admin/路径映射到Django自带的后台管理界面的URL模式。admin.site.urls: 这是一个URL配置对象,通常由Django的admin应用提供。这个对象包含了Django后台管理界面所需要的所有URL模式


2-name:

urlpatterns = [  
    path('', views.index, name='index'),
name='index'给这个URL模式命名为了index。这意味着你可以在Django的模板中使用{% url 'index' %}来生成这个URL,或者在视图中使用reverse('index')来获取这个URL

如果你不为URL模式指定name参数,那么在Django模板中你将无法使用{% url %}标签来动态生成该URL。同样地,在视图中你也无法使用reverse()函数来获取该URL。
如果你没有为根URL的视图指定名称,并且想要在模板中引用它,你将需要硬编码URL的路径
 

3-include函数:

path("", include("library_project.urls"))

同样这也是一个根目录,含有如下:

path('', include('myapp.urls'))意味着当访问应用的根URL时(例如,http://example.com/),Django将查找myapp.urls中定义的URL模式。这通常用于将应用的URL模式直接映射到项目的根URL。

而path('myapp/', include('myapp.urls'))意味着当访问http://example.com/myapp/时,Django才会查找myapp.urls中定义的URL模式。这允许您将应用的URL空间限制在一个特定的路径前缀下

4-path函数的基本用法,包括如何映射URL路径到视图函数,以及如何处理带参数的URL

  1. path("list_employee_old", list_employee_old)

这行代码定义了一个URL路由,它将list_employee_old这个路径映射到list_employee_old这个视图函数。当用户访问http://yourdomain.com/list_employee_old这个URL时,Django会调用list_employee_old这个视图函数来处理请求。

注意:这里没有使用name参数来给这个URL路由命名,所以在模板中或视图中不能直接通过名字来反向解析这个URL。如果需要反向解析,你需要添加name参数。

  1. path("del_employee_new/<int:group>", del_dep_old)

这行代码定义了一个带参数的URL路由。它包含两部分:

  • del_employee_new/<int:group>:这部分是URL的路径。<int:group>是一个转换器,它告诉Django这个部分应该匹配一个整数,并将这个整数作为关键字参数group传递给视图函数。
  • del_dep_old:这是当URL被匹配时要调用的视图函数。

当用户访问类似于http://yourdomain.com/del_employee_new/123的URL时(其中123是一个整数),Django会调用del_dep_old这个视图函数,并将整数123作为group参数传递给这个函数。

注意(django中的路径是指网页地址去掉域名或ip地址,端口号以及残数剩下的部分)

  • http:// 是协议部分。
  • example.com 是域名。
  • :8000 是端口号。
  • /myapp/myview/ 是URL路径。
  • ?param=value 是查询字符串。

在Django中,我们主要关心的是URL路径部分,即/myapp/myview/

http://example.com:8000/myapp/myview/?param=value

5-关于Django的URL模式像套娃一样嵌套

在Django中,一级URL和二级URL其实是指URL配置的不同层次。
一级URL,通常指的是在项目的urls.py文件中直接配置的URL模式。这些URL模式直接关联到视图函数或基于类的视图,用于处理用户请求。例如,你可能会在项目的urls.py中看到类似这样的配置:path('home/', HomeView.as_view(), name='home'),这就是一个一级URL,它直接指向了名为HomeView的视图。
而二级URL,则是在Django的app中定义的URL模式。这些URL模式首先会在app的urls.py文件中定义,然后通过include函数在项目的urls.py文件中引入。这样的结构使得URL配置更加模块化,便于管理和维护。例如,你可能有一个app叫做blog,它有自己的urls.py文件,里面定义了博客相关的URL模式,然后在项目的urls.py文件中通过include('blog.urls')引入这些URL模式。
在Django中,一级URL和二级URL的区分主要是基于URL配置的结构和层次。一级URL更偏向于全局和整体的配置,而二级URL则更侧重于特定应用和功能的配置。这样的设计使得Django的URL配置既灵活又易于管理。

如:
当访问test_orm_old/时django会到employee目录下查找urls,    

 urls.内容如下                        

from django.urls import path, include
from employee.views import *
urlpatterns = [
    path("list_employee_old/",list_employee_old),
    path("add_employee_old/", add_employee_old),
    path("edit_employee_old/<int:emp_id>/", edit_employee_old),
    path("del_employee_old/<int:emp_id",del_employee_old),
]当我访问list_employee_old/时,django又会在views中查找list_employee_old函数,include()函数可以接受一个模块路径作为参数,该模块应该包含一个名为urlpatterns的列表,其中包含该模块定义的URL模式。如果path()里面没有include,默认是视图函数。如果views中是

def list_employee_old(request):
    dep_list = models.Department.objects.all()
    return render(request, 'test_orm_old/list_dep_old.html', {'dep_list': dep_list})

django又会在'test_orm_old目录下查找list_dep_old.html'

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值