|
|
# 导入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>/', # 路由路径:<int: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/<int:year>/<int:month>/<int:day>/<int:article_id>.html', # 路径参数:年、月、日(整数)、文章ID(整数)
|
|
|
views.ArticleDetailView.as_view(), # 关联文章详情视图类
|
|
|
name='detailbyid'), # 路由名称:用于反向解析文章详情页,名称为'detailbyid'
|
|
|
|
|
|
# 4. 分类详情页路由:匹配分类slug对应的页面(如/category/python.html)
|
|
|
path(
|
|
|
r'category/<slug:category_name>.html', # 路径参数:<slug:category_name>,slug类型支持字母、数字、连字符、下划线
|
|
|
views.CategoryDetailView.as_view(), # 关联分类详情视图类
|
|
|
name='category_detail'), # 路由名称:用于反向解析分类首页,名称为'category_detail'
|
|
|
|
|
|
# 5. 分类分页路由:匹配带页码的分类页(如/category/python/3.html)
|
|
|
path(
|
|
|
r'category/<slug:category_name>/<int:page>.html', # 路径参数:分类slug + 分页页码(整数)
|
|
|
views.CategoryDetailView.as_view(), # 复用分类详情视图类,处理分页逻辑
|
|
|
name='category_detail_page'), # 路由名称:用于反向解析分类分页,名称为'category_detail_page'
|
|
|
|
|
|
# 6. 作者文章列表路由:匹配作者名称对应的文章列表页(如/author/liangliangyy.html)
|
|
|
path(
|
|
|
r'author/<author_name>.html', # 路径参数:author_name(字符串类型,默认不限制字符,匹配作者用户名)
|
|
|
views.AuthorDetailView.as_view(), # 关联作者文章列表视图类
|
|
|
name='author_detail'), # 路由名称:用于反向解析作者首页,名称为'author_detail'
|
|
|
|
|
|
# 7. 作者文章分页路由:匹配带页码的作者文章列表页(如/author/liangliangyy/2.html)
|
|
|
path(
|
|
|
r'author/<author_name>/<int:page>.html', # 路径参数:作者名称 + 分页页码(整数)
|
|
|
views.AuthorDetailView.as_view(), # 复用作者文章列表视图类,处理分页逻辑
|
|
|
name='author_detail_page'), # 路由名称:用于反向解析作者分页,名称为'author_detail_page'
|
|
|
|
|
|
# 8. 标签详情页路由:匹配标签slug对应的文章列表页(如/tag/django.html)
|
|
|
path(
|
|
|
r'tag/<slug:tag_name>.html', # 路径参数:<slug:tag_name>,标签的URL友好标识
|
|
|
views.TagDetailView.as_view(), # 关联标签详情视图类
|
|
|
name='tag_detail'), # 路由名称:用于反向解析标签首页,名称为'tag_detail'
|
|
|
|
|
|
# 9. 标签分页路由:匹配带页码的标签文章列表页(如/tag/django/4.html)
|
|
|
path(
|
|
|
r'tag/<slug:tag_name>/<int:page>.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'
|
|
|
] |