|
|
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 |