You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Django/doc/blog/urls.py

92 lines
5.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 导入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'
]