|
|
|
|
@ -29,15 +29,17 @@ from djangoblog.elasticsearch_backend import ElasticSearchModelSearchForm
|
|
|
|
|
from djangoblog.feeds import DjangoBlogFeed
|
|
|
|
|
from djangoblog.sitemap import ArticleSiteMap, CategorySiteMap, StaticViewSitemap, TagSiteMap, UserSiteMap
|
|
|
|
|
|
|
|
|
|
# sitemap 映射,用于生成不同资源的站点地图
|
|
|
|
|
sitemaps = {
|
|
|
|
|
|
|
|
|
|
'blog': ArticleSiteMap,
|
|
|
|
|
'Category': CategorySiteMap,
|
|
|
|
|
'Tag': TagSiteMap,
|
|
|
|
|
'User': UserSiteMap,
|
|
|
|
|
'static': StaticViewSitemap
|
|
|
|
|
'blog': ArticleSiteMap, # 文章
|
|
|
|
|
'Category': CategorySiteMap, # 分类
|
|
|
|
|
'Tag': TagSiteMap, # 标签
|
|
|
|
|
'User': UserSiteMap, # 作者
|
|
|
|
|
'static': StaticViewSitemap # 静态页面
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 全局错误处理视图
|
|
|
|
|
handler404 = 'blog.views.page_not_found_view'
|
|
|
|
|
handler500 = 'blog.views.server_error_view'
|
|
|
|
|
handle403 = 'blog.views.permission_denied_view'
|
|
|
|
|
@ -53,26 +55,29 @@ def health_check(request):
|
|
|
|
|
'timestamp': time.time()
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
# 非国际化前缀的基础路由
|
|
|
|
|
urlpatterns = [
|
|
|
|
|
path('i18n/', include('django.conf.urls.i18n')),
|
|
|
|
|
path('health/', health_check, name='health_check'),
|
|
|
|
|
path('i18n/', include('django.conf.urls.i18n')), # 语言切换
|
|
|
|
|
path('health/', health_check, name='health_check'), # 健康检查
|
|
|
|
|
]
|
|
|
|
|
# 带国际化前缀的路由(根据当前语言自动切换),并关闭默认语言前缀
|
|
|
|
|
urlpatterns += i18n_patterns(
|
|
|
|
|
re_path(r'^admin/', admin_site.urls),
|
|
|
|
|
re_path(r'', include('blog.urls', namespace='blog')),
|
|
|
|
|
re_path(r'mdeditor/', include('mdeditor.urls')),
|
|
|
|
|
re_path(r'', include('comments.urls', namespace='comment')),
|
|
|
|
|
re_path(r'', include('accounts.urls', namespace='account')),
|
|
|
|
|
re_path(r'', include('oauth.urls', namespace='oauth')),
|
|
|
|
|
re_path(r'^admin/', admin_site.urls), # 自定义后台
|
|
|
|
|
re_path(r'', include('blog.urls', namespace='blog')), # 博客模块
|
|
|
|
|
re_path(r'mdeditor/', include('mdeditor.urls')), # Markdown 编辑器
|
|
|
|
|
re_path(r'', include('comments.urls', namespace='comment')), # 评论模块
|
|
|
|
|
re_path(r'', include('accounts.urls', namespace='account')), # 账户模块
|
|
|
|
|
re_path(r'', include('oauth.urls', namespace='oauth')), # 第三方登录
|
|
|
|
|
re_path(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps},
|
|
|
|
|
name='django.contrib.sitemaps.views.sitemap'),
|
|
|
|
|
re_path(r'^feed/$', DjangoBlogFeed()),
|
|
|
|
|
re_path(r'^rss/$', DjangoBlogFeed()),
|
|
|
|
|
name='django.contrib.sitemaps.views.sitemap'), # 站点地图
|
|
|
|
|
re_path(r'^feed/$', DjangoBlogFeed()), # RSS Feed
|
|
|
|
|
re_path(r'^rss/$', DjangoBlogFeed()), # RSS Feed(兼容路径)
|
|
|
|
|
re_path('^search', search_view_factory(view_class=EsSearchView, form_class=ElasticSearchModelSearchForm),
|
|
|
|
|
name='search'),
|
|
|
|
|
name='search'), # 全文搜索(Haystack + ES)
|
|
|
|
|
re_path(r'', include('servermanager.urls', namespace='servermanager')),
|
|
|
|
|
re_path(r'', include('owntracks.urls', namespace='owntracks'))
|
|
|
|
|
, prefix_default_language=False) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
|
|
|
|
|
if settings.DEBUG:
|
|
|
|
|
# 开发环境下提供媒体文件访问
|
|
|
|
|
urlpatterns += static(settings.MEDIA_URL,
|
|
|
|
|
document_root=settings.MEDIA_ROOT)
|
|
|
|
|
|