1.在全局配置文件下找到urls.py进行路由配置
配置路由要指明哪个应用,和写好模块导入的函数
2.找到路由要启动的应用,在应用里找到视图函数进行设计
path(‘url模式/“,视图函数)
注意第五部没有/
1.1.110路由匹配模式1:精确字符串格式
假设我们有一个 Django 应用,并且希望在访问 /about/
URL 时调用一个名为 about_view
的视图函数。可以在 urls.py
文件中定义如下的路由规则:
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('about/', views.about_view, name='about'),
]
详细解释
-
path
函数:path
函数用于定义 URL 路由。它接受多个参数:- 第一个参数是 URL 模式,这里是
'about/'
,表示精确匹配/about/
。 - 第二个参数是视图函数,这里是
views.about_view
,表示当 URL 匹配'about/'
时,调用about_view
函数。 - 第三个参数是可选的
name
参数,用于为这个 URL 路由命名,便于在模板或其他地方引用。
- 第一个参数是 URL 模式,这里是
-
精确字符串格式:
- 在这个例子中,URL 模式
'about/'
是一个精确字符串格式。这意味着只有当请求的 URL 完全匹配/about/
时,才会调用about_view
视图函数。 - 例如,访问
http://example.com/about/
会匹配这个路由规则,而访问http://example.com/about
(缺少尾部斜杠)或http://example.com/about/me
则不会匹配。
- 在这个例子中,URL 模式
视图函数示例
为了完整性,这里提供一个简单的视图函数示例:
# views.py
from django.http import HttpResponse
def about_view(request):
return HttpResponse("This is the about page.")
1.1.111路由匹配模式2:路径转换器格式
1.1.12路由匹配模式3:正则表达式
使用 re_path
和正则表达式匹配 URL
re_path
函数与 path
函数类似,但它允许你使用正则表达式来匹配 URL 模式。
示例
以下是一些使用正则表达式的 URL 模式示例:
from django.urls import re_path
from . import views
urlpatterns = [
re_path(r'^articles/(?P<year>[0-9]{4})/$', views.article_year),
re_path(r'^users/(?P<username>\w{1,30})/$', views.user_profile),
re_path(r'^files/(?P<file_path>.+)/$', views.file_detail),
re_path(r'^items/(?P<item_id>[0-9a-fA-F-]{36})/$', views.item_detail),
]
在这些示例中:
r'^articles/(?P<year>[0-9]{4})/$'
匹配一个四位数字的年份,并将其作为year
参数传递给视图article_year
。r'^users/(?P<username>\w{1,30})/$'
匹配一个长度为 1 到 30 的字母数字用户名,并将其作为username
参数传递给视图user_profile
。r'^files/(?P<file_path>.+)/$'
匹配一个包含任意字符的文件路径,并将其作为file_path
参数传递给视图file_detail
。r'^items/(?P<item_id>[0-9a-fA-F-]{36})/$'
匹配一个 UUID,并将其作为item_id
参数传递给视图item_detail
。
正则表达式语法
^
表示字符串的开始。$
表示字符串的结束。.
匹配任意单个字符。+
表示前面的字符或表达式至少出现一次。{n}
表示前面的字符或表达式出现恰好 n 次。\d
匹配任意数字字符,相当于[0-9]
。\w
匹配任意字母数字字符,相当于[a-zA-Z0-9_]
。(?P<name>pattern)
用于捕获匹配的内容并将其命名为name
,以便在视图函数中作为参数使用。
1.1.13路由嵌套匹配
使用 include
实现路由嵌套
假设你有一个主应用程序 main
和一个子应用程序 blog
,你希望在 main
的 URL 配置中包含 blog
的 URL 配置。
主应用程序的 URL 配置 (main/urls.py
)
首先,在主应用程序的 URL 配置文件中使用 include
函数包含子应用程序的 URL 配置:
from django.urls import path, include
urlpatterns = [
path('blog/', include('blog.urls')),
]
子应用程序的 URL 配置 (blog/urls.py
)
在子应用程序中,定义自己的 URL 配置:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('<int:post_id>/', views.detail, name='detail'),
path('archive/', views.archive, name='archive'),
]
在这个示例中:
- 访问
http://yourdomain.com/blog/
会调用blog
应用的index
视图。 - 访问
http://yourdomain.com/blog/1/
会调用blog
应用的detail
视图,并将post_id
参数传递给视图。 - 访问
http://yourdomain.com/blog/archive/
会调用blog
应用的archive
视图。
嵌套更深层级的路由
你可以继续嵌套更深层级的路由。例如,如果 blog
应用有一个 comments
子应用:
子应用程序的 URL 配置 (comments/urls.py
)
from django.urls import path
from . import views
urlpatterns = [
path('', views.comment_list, name='comment_list'),
path('<int:comment_id>/', views.comment_detail, name='comment_detail'),
]
修改 blog
应用的 URL 配置以包含 comments
子应用 (blog/urls.py
)
from django.urls import path, include
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('<int:post_id>/', views.detail, name='detail'),
path('archive/', views.archive, name='archive'),
path('comments/', include('comments.urls')),
]
在这个示例中:
- 访问
http://yourdomain.com/blog/comments/
会调用comments
应用的comment_list
视图。 - 访问
http://yourdomain.com/blog/comments/1/
会调用comments
应用的comment_detail
视图,并将comment_id
参数传递给视图。