From f4f3e35f54b08069787c78171e6e011e6c92a407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E6=AC=A3=E6=80=A1?= <3093609022@qq.com> Date: Wed, 15 Oct 2025 21:27:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20context=5Fprocessors.py=20?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 3 + .../blog/context_processors.py | 66 ++++++++++++++----- 2 files changed, 51 insertions(+), 18 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 423a25df..ecfd11f6 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,7 @@ + + \ No newline at end of file diff --git a/djangoblog/src/DjangoBlog-master/DjangoBlog-master/blog/context_processors.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/blog/context_processors.py index 73e3088b..f2acba47 100644 --- a/djangoblog/src/DjangoBlog-master/DjangoBlog-master/blog/context_processors.py +++ b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/blog/context_processors.py @@ -1,43 +1,73 @@ +# 导入日志模块,用于记录系统运行时的信息和错误 import logging +# 从django.utils导入timezone,用于获取当前时间 from django.utils import timezone +# 导入自定义的缓存工具和获取博客设置的工具函数 from djangoblog.utils import cache, get_blog_setting +# 导入当前应用下的Category(分类)和Article(文章)模型 from .models import Category, Article +# 创建日志记录器,用于记录当前模块的日志信息 logger = logging.getLogger(__name__) def seo_processor(requests): + """ + 自定义上下文处理器,用于在所有模板中全局共享SEO相关的配置和数据 + + 上下文处理器是Django的一个功能,允许你在所有模板中自动添加变量, + 无需在每个视图函数中单独传递,特别适合网站全局配置信息的共享。 + + Args: + requests: Django请求对象,包含当前请求的相关信息(如域名、协议等) + + Returns: + dict: 包含网站配置、分类、页面等信息的字典,将被注入到所有模板中 + """ + # 定义缓存键,用于标识当前处理器的缓存数据 key = 'seo_processor' + # 尝试从缓存中获取数据,减少数据库查询和计算开销 value = cache.get(key) + + # 如果缓存中存在数据,直接返回缓存内容 if value: return value else: + # 缓存未命中时,记录日志并重新计算数据 logger.info('set processor cache.') + # 获取博客的全局设置(从数据库或其他配置源) setting = get_blog_setting() + + # 构建需要传递给模板的全局变量字典 value = { - 'SITE_NAME': setting.site_name, - 'SHOW_GOOGLE_ADSENSE': setting.show_google_adsense, - 'GOOGLE_ADSENSE_CODES': setting.google_adsense_codes, - 'SITE_SEO_DESCRIPTION': setting.site_seo_description, - 'SITE_DESCRIPTION': setting.site_description, - 'SITE_KEYWORDS': setting.site_keywords, + 'SITE_NAME': setting.site_name, # 网站名称 + 'SHOW_GOOGLE_ADSENSE': setting.show_google_adsense, # 是否显示谷歌广告 + 'GOOGLE_ADSENSE_CODES': setting.google_adsense_codes, # 谷歌广告代码 + 'SITE_SEO_DESCRIPTION': setting.site_seo_description, # 网站SEO描述(用于搜索引擎) + 'SITE_DESCRIPTION': setting.site_description, # 网站描述 + 'SITE_KEYWORDS': setting.site_keywords, # 网站关键词(用于SEO) + # 网站基础URL(如https://example.com/) 'SITE_BASE_URL': requests.scheme + '://' + requests.get_host() + '/', - 'ARTICLE_SUB_LENGTH': setting.article_sub_length, - 'nav_category_list': Category.objects.all(), + 'ARTICLE_SUB_LENGTH': setting.article_sub_length, # 文章摘要长度 + 'nav_category_list': Category.objects.all(), # 导航栏显示的所有分类 + # 导航栏显示的页面(类型为'p'即page,状态为'p'即published) 'nav_pages': Article.objects.filter( type='p', status='p'), - 'OPEN_SITE_COMMENT': setting.open_site_comment, - 'BEIAN_CODE': setting.beian_code, - 'ANALYTICS_CODE': setting.analytics_code, - "BEIAN_CODE_GONGAN": setting.gongan_beiancode, - "SHOW_GONGAN_CODE": setting.show_gongan_code, - "CURRENT_YEAR": timezone.now().year, - "GLOBAL_HEADER": setting.global_header, - "GLOBAL_FOOTER": setting.global_footer, - "COMMENT_NEED_REVIEW": setting.comment_need_review, + 'OPEN_SITE_COMMENT': setting.open_site_comment, # 是否开启网站评论功能 + 'BEIAN_CODE': setting.beian_code, # 网站备案号 + 'ANALYTICS_CODE': setting.analytics_code, # 网站统计代码(如Google Analytics) + "BEIAN_CODE_GONGAN": setting.gongan_beiancode, # 公安备案号 + "SHOW_GONGAN_CODE": setting.show_gongan_code, # 是否显示公安备案号 + "CURRENT_YEAR": timezone.now().year, # 当前年份(用于页脚版权信息等) + "GLOBAL_HEADER": setting.global_header, # 全局页眉代码(如额外的CSS/JS) + "GLOBAL_FOOTER": setting.global_footer, # 全局页脚代码 + "COMMENT_NEED_REVIEW": setting.comment_need_review, # 评论是否需要审核 } + + # 将数据存入缓存,有效期为10小时(60秒*60分*10小时) cache.set(key, value, 60 * 60 * 10) - return value + # 返回构建的全局变量字典 + return value \ No newline at end of file