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.
DjangoBlog-Maintenance-Anal.../src/context_processors.py

86 lines
3.0 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.

import logging
from django.utils import timezone
from djangoblog.utils import cache, get_blog_setting
from .models import Category, Article
logger = logging.getLogger(__name__)
def seo_processor(requests):
"""
SEO上下文处理器
这个函数是一个Django上下文处理器用于向所有模板传递SEO相关的变量。
它使用缓存来提高性能,避免每次请求都查询数据库。
Args:
requests: Django请求对象包含当前请求的信息
Returns:
dict: 包含SEO和网站设置信息的字典这些变量将在所有模板中可用
"""
# 缓存键名
key = 'seo_processor'
# 尝试从缓存中获取数据
value = cache.get(key)
if value:
# 如果缓存存在,直接返回缓存数据
return value
else:
# 缓存不存在,重新生成数据
logger.info('set processor cache.')
# 获取博客全局设置
setting = get_blog_setting()
# 构建包含所有SEO和网站设置信息的字典
value = {
# 网站基本信息
'SITE_NAME': setting.site_name, # 网站名称
'SITE_SEO_DESCRIPTION': setting.site_seo_description, # SEO描述
'SITE_DESCRIPTION': setting.site_description, # 网站描述
'SITE_KEYWORDS': setting.site_keywords, # 网站关键词
# 网站URL相关
'SITE_BASE_URL': requests.scheme + '://' + requests.get_host() + '/', # 网站基础URL
# 文章相关设置
'ARTICLE_SUB_LENGTH': setting.article_sub_length, # 文章摘要长度
# 导航数据
'nav_category_list': Category.objects.all(), # 所有分类(用于导航菜单)
'nav_pages': Article.objects.filter(
type='p', # 页面类型
status='p'), # 已发布状态
# 评论系统设置
'OPEN_SITE_COMMENT': setting.open_site_comment, # 是否开启评论
'COMMENT_NEED_REVIEW': setting.comment_need_review, # 评论是否需要审核
# 备案信息
'BEIAN_CODE': setting.beian_code, # ICP备案号
"BEIAN_CODE_GONGAN": setting.gongan_beiancode, # 公安备案号
"SHOW_GONGAN_CODE": setting.show_gongan_code, # 是否显示公安备案
# 广告相关
'SHOW_GOOGLE_ADSENSE': setting.show_google_adsense, # 是否显示Google广告
'GOOGLE_ADSENSE_CODES': setting.google_adsense_codes, # Google广告代码
# 统计代码
'ANALYTICS_CODE': setting.analytics_code, # 网站统计代码(如百度统计)
# 时间信息
"CURRENT_YEAR": timezone.now().year, # 当前年份
# 全局页头页脚
"GLOBAL_HEADER": setting.global_header, # 全局头部HTML
"GLOBAL_FOOTER": setting.global_footer, # 全局尾部HTML
}
# 将数据存入缓存有效期10小时60 * 60 * 10秒
cache.set(key, value, 60 * 60 * 10)
return value