📅  最后修改于: 2023-12-03 15:14:44.766000             🧑  作者: Mango
Django 是一个流行的 Python web 框架,它使用 URL 映射将 URL 地址映射到对应的视图函数上。在本文中,我们将介绍 Django URL 映射的相关内容。
在 Django 中,URL 映射通过 URLconf 实现,URLconf 是指 URL 配置文件,它告诉 Django 如何将 URL 映射到视图函数。URLconf 文件通常包含以下内容:
from django.urls import path
from . import views
urlpatterns = [
path('articles/', views.article_list, name='article_list'),
path('articles/<int:pk>/', views.article_detail, name='article_detail'),
]
from django.urls import path
:导入 path 函数;from . import views
:导入视图函数;urlpatterns
:URL 映射表,包含多个 URL 映射项;path('articles/', views.article_list, name='article_list')
:URL 映射项,将路径 /articles/
映射到视图函数 article_list
上,映射的名称为 article_list
;path('articles/<int:pk>/', views.article_detail, name='article_detail')
:URL 映射项,将路径 /articles/<文章 ID>/
映射到视图函数 article_detail
上,映射的名称为 article_detail
,其中 <int:pk>
表示文章 ID,是一个整数。除了基本的 URL 映射外,Django 还支持以下进阶用法:
如果需要更灵活的 URL 映射,可以使用正则表达式。例如,以下 URL 映射将路径 /articles/<year>/<month>/
映射到视图函数 article_list
上:
from django.urls import re_path
from . import views
urlpatterns = [
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.article_list, name='article_list'),
]
其中,re_path
函数接受一个正则表达式作为参数,正则表达式中使用 (?P<name>pattern)
的语法来匹配 URL 中的参数,名称为 name
,匹配模式为 pattern
。例如,(?P<year>[0-9]{4})
匹配 4 位数字,名称为 year
。
当多个应用程序的 URL 映射冲突时,可以使用应用程序命名空间来区分。例如,以下 URL 映射将路径 /articles/
映射到视图函数 article_list
上:
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
path('articles/', views.article_list, name='article_list'),
]
其中,app_name = 'blog'
为应用程序指定命名空间,name='blog:article_list'
指定了 URL 映射的名称,blog:
为应用程序命名空间。
在 Django 中,可以通过 URL 名称反向解析 URL。例如,以下 URL 映射将路径 /articles/
映射到视图函数 article_list
上:
from django.urls import path
from . import views
urlpatterns = [
path('articles/', views.article_list, name='article_list'),
]
当需要生成对应的 URL 时,可以使用 reverse
函数,例如:
from django.urls import reverse
url = reverse('article_list')
其中,reverse
函数将根据 URL 映射的名称,生成对应的 URL 地址。
本文介绍了 Django URL 映射的基本概念和进阶用法,包括正则表达式、应用程序命名空间和反向解析 URL。了解这些内容后,可以更灵活地配置 Django 的 URL 映射。