关于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

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参数。

path("del_employee_new/", del_dep_old)

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

del_employee_new/:这部分是URL的路径。是一个转换器,它告诉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//", edit_employee_old),     path("del_employee_old/

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'

相关链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。