|
|
|
|
@ -1,62 +1,98 @@
|
|
|
|
|
# 导入Django URL路径处理和缓存装饰器
|
|
|
|
|
from django.urls import path
|
|
|
|
|
from django.views.decorators.cache import cache_page
|
|
|
|
|
|
|
|
|
|
# 导入当前应用的视图模块
|
|
|
|
|
from . import views
|
|
|
|
|
|
|
|
|
|
# 定义应用命名空间,用于模板中URL反向解析(如{% url 'blog:index' %})
|
|
|
|
|
app_name = "blog"
|
|
|
|
|
|
|
|
|
|
# URL路由配置列表,映射URL路径到对应的视图
|
|
|
|
|
urlpatterns = [
|
|
|
|
|
# 首页路由
|
|
|
|
|
path(
|
|
|
|
|
r'',
|
|
|
|
|
views.IndexView.as_view(),
|
|
|
|
|
name='index'),
|
|
|
|
|
r'', # 匹配根路径(如域名/)
|
|
|
|
|
views.IndexView.as_view(), # 关联首页视图(基于类的视图)
|
|
|
|
|
name='index' # 路由名称,用于反向解析
|
|
|
|
|
),
|
|
|
|
|
# 首页分页路由(带页码参数)
|
|
|
|
|
path(
|
|
|
|
|
r'page/<int:page>/',
|
|
|
|
|
views.IndexView.as_view(),
|
|
|
|
|
name='index_page'),
|
|
|
|
|
r'page/<int:page>/', # 匹配带页码的路径(如/page/2/)
|
|
|
|
|
views.IndexView.as_view(), # 复用首页视图处理分页
|
|
|
|
|
name='index_page' # 路由名称
|
|
|
|
|
),
|
|
|
|
|
# 文章详情页路由(按日期和ID)
|
|
|
|
|
path(
|
|
|
|
|
r'article/<int:year>/<int:month>/<int:day>/<int:article_id>.html',
|
|
|
|
|
views.ArticleDetailView.as_view(),
|
|
|
|
|
name='detailbyid'),
|
|
|
|
|
# 匹配路径格式:article/年/月/日/文章ID.html(如article/2023/10/01/1.html)
|
|
|
|
|
views.ArticleDetailView.as_view(), # 关联文章详情视图
|
|
|
|
|
name='detailbyid' # 路由名称
|
|
|
|
|
),
|
|
|
|
|
# 分类详情页路由
|
|
|
|
|
path(
|
|
|
|
|
r'category/<slug:category_name>.html',
|
|
|
|
|
views.CategoryDetailView.as_view(),
|
|
|
|
|
name='category_detail'),
|
|
|
|
|
# 匹配路径:category/分类别名.html(如category/tech.html),slug表示URL友好的字符串
|
|
|
|
|
views.CategoryDetailView.as_view(), # 关联分类详情视图
|
|
|
|
|
name='category_detail' # 路由名称
|
|
|
|
|
),
|
|
|
|
|
# 分类详情页分页路由
|
|
|
|
|
path(
|
|
|
|
|
r'category/<slug:category_name>/<int:page>.html',
|
|
|
|
|
views.CategoryDetailView.as_view(),
|
|
|
|
|
name='category_detail_page'),
|
|
|
|
|
# 匹配带页码的分类路径(如category/tech/2.html)
|
|
|
|
|
views.CategoryDetailView.as_view(), # 复用分类视图处理分页
|
|
|
|
|
name='category_detail_page' # 路由名称
|
|
|
|
|
),
|
|
|
|
|
# 作者文章列表路由
|
|
|
|
|
path(
|
|
|
|
|
r'author/<author_name>.html',
|
|
|
|
|
views.AuthorDetailView.as_view(),
|
|
|
|
|
name='author_detail'),
|
|
|
|
|
# 匹配路径:author/用户名.html(如author/admin.html)
|
|
|
|
|
views.AuthorDetailView.as_view(), # 关联作者文章列表视图
|
|
|
|
|
name='author_detail' # 路由名称
|
|
|
|
|
),
|
|
|
|
|
# 作者文章列表分页路由
|
|
|
|
|
path(
|
|
|
|
|
r'author/<author_name>/<int:page>.html',
|
|
|
|
|
views.AuthorDetailView.as_view(),
|
|
|
|
|
name='author_detail_page'),
|
|
|
|
|
# 匹配带页码的作者路径(如author/admin/2.html)
|
|
|
|
|
views.AuthorDetailView.as_view(), # 复用作者视图处理分页
|
|
|
|
|
name='author_detail_page' # 路由名称
|
|
|
|
|
),
|
|
|
|
|
# 标签详情页路由
|
|
|
|
|
path(
|
|
|
|
|
r'tag/<slug:tag_name>.html',
|
|
|
|
|
views.TagDetailView.as_view(),
|
|
|
|
|
name='tag_detail'),
|
|
|
|
|
# 匹配路径:tag/标签别名.html(如tag/python.html)
|
|
|
|
|
views.TagDetailView.as_view(), # 关联标签详情视图
|
|
|
|
|
name='tag_detail' # 路由名称
|
|
|
|
|
),
|
|
|
|
|
# 标签详情页分页路由
|
|
|
|
|
path(
|
|
|
|
|
r'tag/<slug:tag_name>/<int:page>.html',
|
|
|
|
|
views.TagDetailView.as_view(),
|
|
|
|
|
name='tag_detail_page'),
|
|
|
|
|
path(
|
|
|
|
|
'archives.html',
|
|
|
|
|
cache_page(
|
|
|
|
|
60 * 60)(
|
|
|
|
|
views.ArchivesView.as_view()),
|
|
|
|
|
name='archives'),
|
|
|
|
|
path(
|
|
|
|
|
'links.html',
|
|
|
|
|
views.LinkListView.as_view(),
|
|
|
|
|
name='links'),
|
|
|
|
|
path(
|
|
|
|
|
r'upload',
|
|
|
|
|
views.fileupload,
|
|
|
|
|
name='upload'),
|
|
|
|
|
path(
|
|
|
|
|
r'clean',
|
|
|
|
|
views.clean_cache_view,
|
|
|
|
|
name='clean'),
|
|
|
|
|
# 匹配带页码的标签路径(如tag/python/2.html)
|
|
|
|
|
views.TagDetailView.as_view(), # 复用标签视图处理分页
|
|
|
|
|
name='tag_detail_page' # 路由名称
|
|
|
|
|
),
|
|
|
|
|
# 文章归档页路由(带缓存)
|
|
|
|
|
path(
|
|
|
|
|
'archives.html', # 匹配路径:archives.html
|
|
|
|
|
cache_page(60 * 60)(views.ArchivesView.as_view()), # 缓存60分钟(60秒*60)
|
|
|
|
|
name='archives' # 路由名称
|
|
|
|
|
),
|
|
|
|
|
# 友情链接页路由
|
|
|
|
|
path(
|
|
|
|
|
'links.html', # 匹配路径:links.html
|
|
|
|
|
views.LinkListView.as_view(), # 关联友情链接视图
|
|
|
|
|
name='links' # 路由名称
|
|
|
|
|
),
|
|
|
|
|
# 文件上传接口路由
|
|
|
|
|
path(
|
|
|
|
|
r'upload', # 匹配路径:upload
|
|
|
|
|
views.fileupload, # 关联文件上传视图函数(基于函数的视图)
|
|
|
|
|
name='upload' # 路由名称
|
|
|
|
|
),
|
|
|
|
|
# 清理缓存接口路由
|
|
|
|
|
path(
|
|
|
|
|
r'clean', # 匹配路径:clean
|
|
|
|
|
views.clean_cache_view, # 关联清理缓存视图函数
|
|
|
|
|
name='clean' # 路由名称
|
|
|
|
|
),
|
|
|
|
|
]
|
|
|
|
|
|