# 导入Django URL路由核心模块,用于定义路由规则 from django.urls import path # 导入Django缓存装饰器,用于为视图添加页面缓存(提升访问性能) from django.views.decorators.cache import cache_page # 从当前应用(blog)导入视图模块,路由将映射到对应的视图类/函数 from . import views # 定义应用命名空间(app_name):用于模板URL反向解析时区分不同应用的路由 # 示例:模板中使用 {% url 'blog:index' %} 反向生成首页URL app_name = "blog" # 定义URL路由列表:每个path对应一个路由规则,按匹配优先级排序 urlpatterns = [ # 1. 首页路由:匹配根路径(空字符串) path( r'', # 路由路径:根路径(网站首页) views.IndexView.as_view(), # 关联视图:IndexView类视图的as_view()方法(类视图转为可调用视图) name='index'), # 路由名称:用于反向解析,名称为'index' # 2. 分页首页路由:匹配带页码的首页(如/page/2/) path( r'page//', # 路由路径:为路径参数,int指定参数类型为整数,page为参数名 views.IndexView.as_view(), # 复用首页视图类,视图会通过page参数处理分页逻辑 name='index_page'), # 路由名称:用于反向解析分页首页,名称为'index_page' # 3. 文章详情页路由(按ID匹配):匹配带发布日期和文章ID的URL(如/article/2025/11/5/10.html) path( r'article////.html', # 路径参数:年、月、日(整数)、文章ID(整数) views.ArticleDetailView.as_view(), # 关联文章详情视图类 name='detailbyid'), # 路由名称:用于反向解析文章详情页,名称为'detailbyid' # 4. 分类详情页路由:匹配分类slug对应的页面(如/category/python.html) path( r'category/.html', # 路径参数:,slug类型支持字母、数字、连字符、下划线 views.CategoryDetailView.as_view(), # 关联分类详情视图类 name='category_detail'), # 路由名称:用于反向解析分类首页,名称为'category_detail' # 5. 分类分页路由:匹配带页码的分类页(如/category/python/3.html) path( r'category//.html', # 路径参数:分类slug + 分页页码(整数) views.CategoryDetailView.as_view(), # 复用分类详情视图类,处理分页逻辑 name='category_detail_page'), # 路由名称:用于反向解析分类分页,名称为'category_detail_page' # 6. 作者文章列表路由:匹配作者名称对应的文章列表页(如/author/liangliangyy.html) path( r'author/.html', # 路径参数:author_name(字符串类型,默认不限制字符,匹配作者用户名) views.AuthorDetailView.as_view(), # 关联作者文章列表视图类 name='author_detail'), # 路由名称:用于反向解析作者首页,名称为'author_detail' # 7. 作者文章分页路由:匹配带页码的作者文章列表页(如/author/liangliangyy/2.html) path( r'author//.html', # 路径参数:作者名称 + 分页页码(整数) views.AuthorDetailView.as_view(), # 复用作者文章列表视图类,处理分页逻辑 name='author_detail_page'), # 路由名称:用于反向解析作者分页,名称为'author_detail_page' # 8. 标签详情页路由:匹配标签slug对应的文章列表页(如/tag/django.html) path( r'tag/.html', # 路径参数:,标签的URL友好标识 views.TagDetailView.as_view(), # 关联标签详情视图类 name='tag_detail'), # 路由名称:用于反向解析标签首页,名称为'tag_detail' # 9. 标签分页路由:匹配带页码的标签文章列表页(如/tag/django/4.html) path( r'tag//.html', # 路径参数:标签slug + 分页页码(整数) views.TagDetailView.as_view(), # 复用标签详情视图类,处理分页逻辑 name='tag_detail_page'), # 路由名称:用于反向解析标签分页,名称为'tag_detail_page' # 10. 文章归档页路由:匹配archives.html路径(如/archives.html) path( 'archives.html', # 路由路径:固定为'archives.html' cache_page(60 * 60)(views.ArchivesView.as_view()), # 添加页面缓存:缓存60*60=3600秒(1小时),提升访问性能 name='archives'), # 路由名称:用于反向解析归档页,名称为'archives' # 11. 友情链接页路由:匹配links.html路径(如/links.html) path( 'links.html', # 路由路径:固定为'links.html' views.LinkListView.as_view(), # 关联友情链接列表视图类 name='links'), # 路由名称:用于反向解析友情链接页,名称为'links' # 12. 文件上传接口路由:匹配'upload'路径(如/upload) path( r'upload', # 路由路径:固定为'upload'(无后缀) views.fileupload, # 关联文件上传视图函数(非类视图,直接关联函数) name='upload'), # 路由名称:用于反向解析上传接口,名称为'upload' # 13. 清理缓存接口路由:匹配'clean'路径(如/clean) path( r'clean', # 路由路径:固定为'clean'(无后缀) views.clean_cache_view, # 关联清理缓存视图函数 name='clean'), # 路由名称:用于反向解析清理缓存接口,名称为'clean' ]