From 29d32761cccd8ace3a3fc48514f402c05a9eb382 Mon Sep 17 00:00:00 2001 From: LY Date: Sat, 18 Oct 2025 18:22:57 +0800 Subject: [PATCH] =?UTF-8?q?ly=5F=E7=AC=AC=E4=BA=94=E5=91=A8=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/urls.py | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 src/urls.py diff --git a/src/urls.py b/src/urls.py new file mode 100644 index 0000000..ad0ad00 --- /dev/null +++ b/src/urls.py @@ -0,0 +1,98 @@ +"""djangoblog URL Configuration +项目URL路由总配置文件:定义所有URL与视图/应用的映射关系 +核心作用是将用户访问的URL地址,分发到对应的应用或视图函数处理 +""" +# 导入项目配置,用于获取静态资源、媒体文件路径等 +from django.conf import settings +# 导入国际化URL配置工具,支持多语言URL前缀(如/en/、/zh-hans/) +from django.conf.urls.i18n import i18n_patterns +# 导入静态资源URL配置工具,用于开发环境下提供静态文件访问 +from django.conf.urls.static import static +# 导入站点地图视图,用于生成sitemap.xml +from django.contrib.sitemaps.views import sitemap +# 导入URL路径配置工具(path用于固定路径,re_path支持正则匹配,include用于包含子应用URL) +from django.urls import path, include, re_path +# 导入Haystack搜索视图工厂,用于自定义搜索视图 +from haystack.views import search_view_factory + +# 导入自定义视图和配置:博客搜索视图、自定义Admin站点、ElasticSearch搜索表单 +from blog.views import EsSearchView +from djangoblog.admin_site import admin_site +from djangoblog.elasticsearch_backend import ElasticSearchModelSearchForm +# 导入RSS订阅Feed和站点地图类 +from djangoblog.feeds import DjangoBlogFeed +from djangoblog.sitemap import (ArticleSiteMap, CategorySiteMap, + StaticViewSitemap, TagSiteMap, UserSiteMap) + + +# -------------------------- 站点地图配置 -------------------------- +# 定义站点地图字典:关联不同类型页面的Sitemap类,用于生成sitemap.xml +sitemaps = { + 'blog': ArticleSiteMap, # 文章页面的站点地图 + 'Category': CategorySiteMap, # 分类页面的站点地图 + 'Tag': TagSiteMap, # 标签页面的站点地图 + 'User': UserSiteMap, # 用户主页的站点地图 + 'static': StaticViewSitemap # 静态页面(如首页)的站点地图 +} + + +# -------------------------- 自定义错误页面配置 -------------------------- +# 配置404(页面不存在)错误对应的处理视图 +handler404 = 'blog.views.page_not_found_view' +# 配置500(服务器内部错误)错误对应的处理视图 +handler500 = 'blog.views.server_error_view' +# 配置403(权限不足)错误对应的处理视图 +handle403 = 'blog.views.permission_denied_view' + + +# -------------------------- 基础URL配置 -------------------------- +# 非国际化URL列表:不随语言切换变化的URL +urlpatterns = [ + # 国际化切换入口:提供语言选择功能(如切换中英文) + path('i18n/', include('django.conf.urls.i18n')), +] + + +# -------------------------- 国际化URL配置 -------------------------- +# 国际化URL列表:会自动添加语言前缀(如/zh-hans/admin/、/en/admin/) +# prefix_default_language=False:默认语言(如中文)不添加语言前缀,保持URL简洁 +urlpatterns += i18n_patterns( + # 自定义Admin后台URL:使用项目自定义的admin_site(非Django默认Admin) + re_path(r'^admin/', admin_site.urls), + # 博客核心功能URL:包含文章列表、详情等,命名空间为'blog' + re_path(r'', include('blog.urls', namespace='blog')), + # Markdown编辑器URL:集成mdeditor插件的路由 + re_path(r'mdeditor/', include('mdeditor.urls')), + # 评论功能URL:包含评论提交、列表等,命名空间为'comment' + re_path(r'', include('comments.urls', namespace='comment')), + # 用户账户功能URL:包含登录、注册、个人中心等,命名空间为'account' + re_path(r'', include('accounts.urls', namespace='account')), + # 第三方登录URL:包含GitHub、微信等登录,命名空间为'oauth' + re_path(r'', include('oauth.urls', namespace='oauth')), + # 站点地图URL:生成sitemap.xml,供搜索引擎抓取 + re_path(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, + name='django.contrib.sitemaps.views.sitemap'), + # RSS订阅URL:提供两种路径(/feed/和/rss/),均指向DjangoBlogFeed + re_path(r'^feed/$', DjangoBlogFeed()), + re_path(r'^rss/$', DjangoBlogFeed()), + # 搜索功能URL:使用ElasticSearch搜索视图和表单,命名空间为'search' + re_path('^search', search_view_factory( + view_class=EsSearchView, + form_class=ElasticSearchModelSearchForm + ), name='search'), + # 服务器管理功能URL:包含系统监控等,命名空间为'servermanager' + re_path(r'', include('servermanager.urls', namespace='servermanager')), + # 位置追踪功能URL:集成owntracks的路由,命名空间为'owntracks' + re_path(r'', include('owntracks.urls', namespace='owntracks')), + prefix_default_language=False # 默认语言URL不添加语言前缀 +) + + +# -------------------------- 静态资源与媒体文件URL配置 -------------------------- +# 开发环境下:添加静态文件URL映射(生产环境由Nginx/Apache处理) +urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + +# DEBUG模式下(开发环境):添加媒体文件(用户上传文件)的URL映射 +if settings.DEBUG: + urlpatterns += static(settings.MEDIA_URL, + document_root=settings.MEDIA_ROOT) \ No newline at end of file