URL 路径可将URL 映射至视图上。具体来说,URL 路径由字符串路径、视图和可在项目范围内命名URL的名称(名称为可选参数)组成。Django 遍历每一个URL路径,并在第一个与请求URL匹配的路径处停止。随后,Django 导入与URL 路径匹配的视图并对其加以执行、传递HttpRequest 类实例和关键字(或者位置参数)。
下面在blog 应用程序目录的urls.py 文件中添加下列代码行:
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
path('', views.post_list, name='post_list'),
path('<int:year>/<int:month>/<int:day>/<slug:post>/', views.post_detail, name='post_detail'),
]
在上述代码中,通过app_name变量定义了应用程序命名空间,并可通过应用程序组织URL,并在引用时使用对应名称。这里通过 path() 函数定义了两种不同的路径。其中,第一个URL 路径不接收任何参数,并映射至 post_list 视图。第二个路径接收下列4个参数,并映射至post_detail 视图上。
此处,我们使用尖括号捕捉URL值。任何定义于URL 路径中的值(形如)均作为字符串被捕捉。我们将使用路径转换器(如int:year)以实现特定的匹配,并返回一个整数和slug:post,其与slug 实现特定的匹配(由ASCII字母、数字、连字符和下划线构成的字符串)。
如果path() 和转换器无法满足当前要求,则可采用 re_path() 定义包含 Python 正则表达式的复杂URL 路径。
接下来,需要在项目的主URL 路径中包含blog 应用程序的URL路径。对此,可编辑位于项目mysite 目录中的 urls.py 文件,如下所示:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls', namespace='blog')),
]
利用include 定义的新URL 路径引用了定义于blog 应用程序中的URL 路径,因而包含于blog/路径中。另外,此类路径还位于命名空间blog中。此外,命名空间须在整个项目中保持唯一。稍后,我们即可方便的引用blog URL,如blog:post_list 和 blog:post_detail。
后面本人将对如何创建视图模板进行讲解,谢谢大家的支持。