|
|
|
@ -1,42 +1,74 @@
|
|
|
|
|
|
|
|
{# gq: #}
|
|
|
|
|
|
|
|
{# 1. 模板继承:复用网站基础布局(头部导航、底部信息等公共组件)#}
|
|
|
|
{% extends 'share_layout/base.html' %}
|
|
|
|
{% extends 'share_layout/base.html' %}
|
|
|
|
{% load blog_tags %}
|
|
|
|
|
|
|
|
{% load cache %}
|
|
|
|
{# 2. 加载自定义标签库与缓存工具 #}
|
|
|
|
|
|
|
|
{% load blog_tags %} {# 加载博客专属标签库(文章渲染、分页等功能)#}
|
|
|
|
|
|
|
|
{% load cache %} {# 加载缓存标签库,可用于缓存页面片段提升性能 #}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{# 3. 重写header块:动态生成页面标题和SEO元标签 #}
|
|
|
|
{% block header %}
|
|
|
|
{% block header %}
|
|
|
|
|
|
|
|
{# 根据是否有筛选条件(标签/分类名称)生成不同标题 #}
|
|
|
|
{% if tag_name %}
|
|
|
|
{% if tag_name %}
|
|
|
|
|
|
|
|
{# 有筛选条件时:标题格式为“页面类型:标签名 | 网站描述”#}
|
|
|
|
|
|
|
|
{# 例如“分类:技术 | 我的博客”或“标签:Python | 我的博客”#}
|
|
|
|
<title>{{ page_type }}:{{ tag_name }} | {{ SITE_DESCRIPTION }}</title>
|
|
|
|
<title>{{ page_type }}:{{ tag_name }} | {{ SITE_DESCRIPTION }}</title>
|
|
|
|
|
|
|
|
{# 注释的描述标签:可根据需要启用,针对筛选结果定制SEO描述 #}
|
|
|
|
{% comment %}<meta name="description" content="{{ page_type }}:{{ tag_name }}"/>{% endcomment %}
|
|
|
|
{% comment %}<meta name="description" content="{{ page_type }}:{{ tag_name }}"/>{% endcomment %}
|
|
|
|
{% else %}
|
|
|
|
{% else %}
|
|
|
|
|
|
|
|
{# 无筛选条件时:使用网站名称和描述作为标题 #}
|
|
|
|
<title>{{ SITE_NAME }} | {{ SITE_DESCRIPTION }}</title>
|
|
|
|
<title>{{ SITE_NAME }} | {{ SITE_DESCRIPTION }}</title>
|
|
|
|
{% endif %}
|
|
|
|
{% endif %}
|
|
|
|
<meta name="description" content="{{ SITE_SEO_DESCRIPTION }}"/>
|
|
|
|
|
|
|
|
<meta name="keywords" content="{{ SITE_KEYWORDS }}"/>
|
|
|
|
{# 通用SEO元标签:提升页面在搜索引擎中的表现 #}
|
|
|
|
<meta property="og:type" content="blog"/>
|
|
|
|
<meta name="description" content="{{ SITE_SEO_DESCRIPTION }}"/> {# 网站SEO描述 #}
|
|
|
|
<meta property="og:title" content="{{ SITE_NAME }}"/>
|
|
|
|
<meta name="keywords" content="{{ SITE_KEYWORDS }}"/> {# 网站关键词 #}
|
|
|
|
<meta property="og:description" content="{{ SITE_DESCRIPTION }}"/>
|
|
|
|
{# Open Graph协议标签:优化社交平台分享效果 #}
|
|
|
|
<meta property="og:url" content="{{ SITE_BASE_URL }}"/>
|
|
|
|
<meta property="og:type" content="blog"/> {# 内容类型为博客 #}
|
|
|
|
<meta property="og:site_name" content="{{ SITE_NAME }}"/>
|
|
|
|
<meta property="og:title" content="{{ SITE_NAME }}"/> {# 社交分享标题 #}
|
|
|
|
|
|
|
|
<meta property="og:description" content="{{ SITE_DESCRIPTION }}"/> {# 社交分享描述 #}
|
|
|
|
|
|
|
|
<meta property="og:url" content="{{ SITE_BASE_URL }}"/> {# 网站基础URL #}
|
|
|
|
|
|
|
|
<meta property="og:site_name" content="{{ SITE_NAME }}"/> {# 网站名称 #}
|
|
|
|
{% endblock %}
|
|
|
|
{% endblock %}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{# 4. 重写content块:展示文章列表(支持筛选和分页)#}
|
|
|
|
{% block content %}
|
|
|
|
{% block content %}
|
|
|
|
<div id="primary" class="site-content">
|
|
|
|
<div id="primary" class="site-content"> {# 主内容区容器,应用全局样式 #}
|
|
|
|
<div id="content" role="main">
|
|
|
|
<div id="content" role="main"> {# 核心内容容器,提升无障碍访问性 #}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{# 筛选结果标题:当有筛选条件(如按分类/标签筛选)时显示 #}
|
|
|
|
{% if page_type and tag_name %}
|
|
|
|
{% if page_type and tag_name %}
|
|
|
|
<header class="archive-header">
|
|
|
|
<header class="archive-header">
|
|
|
|
|
|
|
|
{# 显示筛选类型和名称,例如“分类:技术”或“标签:Python”#}
|
|
|
|
<p class="archive-title">{{ page_type }}:<span>{{ tag_name }}</span></p>
|
|
|
|
<p class="archive-title">{{ page_type }}:<span>{{ tag_name }}</span></p>
|
|
|
|
</header><!-- .archive-header -->
|
|
|
|
</header><!-- .archive-header -->
|
|
|
|
{% endif %}
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{# 遍历文章列表:渲染每篇文章的摘要信息 #}
|
|
|
|
{% for article in article_list %}
|
|
|
|
{% for article in article_list %}
|
|
|
|
|
|
|
|
{# 调用自定义标签load_article_detail渲染单篇文章 #}
|
|
|
|
|
|
|
|
{# 参数说明:#}
|
|
|
|
|
|
|
|
{# article:当前文章对象 #}
|
|
|
|
|
|
|
|
{# True:是否显示摘要(True表示展示摘要,False可能展示全文)#}
|
|
|
|
|
|
|
|
{# user:当前登录用户(用于权限判断,如显示编辑按钮)#}
|
|
|
|
{% load_article_detail article True user %}
|
|
|
|
{% load_article_detail article True user %}
|
|
|
|
{% endfor %}
|
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{# 分页控件:当文章数量超过单页显示上限时显示 #}
|
|
|
|
{% if is_paginated %}
|
|
|
|
{% if is_paginated %}
|
|
|
|
|
|
|
|
{# 调用自定义标签load_pagination_info生成分页链接 #}
|
|
|
|
|
|
|
|
{# 参数说明:#}
|
|
|
|
|
|
|
|
{# page_obj:Django分页对象(包含当前页、总页数等信息)#}
|
|
|
|
|
|
|
|
{# page_type:页面类型(如“分类”“标签”,用于生成带筛选条件的分页链接)#}
|
|
|
|
|
|
|
|
{# tag_name:筛选名称(如分类名、标签名,确保分页时保留筛选条件)#}
|
|
|
|
{% load_pagination_info page_obj page_type tag_name %}
|
|
|
|
{% load_pagination_info page_obj page_type tag_name %}
|
|
|
|
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
{% endif %}
|
|
|
|
</div><!-- #content -->
|
|
|
|
</div><!-- #content -->
|
|
|
|
</div><!-- #primary -->
|
|
|
|
</div><!-- #primary -->
|
|
|
|
|
|
|
|
|
|
|
|
{% endblock %}
|
|
|
|
{% endblock %}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{# 5. 重写sidebar块:加载与当前页面匹配的侧边栏 #}
|
|
|
|
{% block sidebar %}
|
|
|
|
{% block sidebar %}
|
|
|
|
|
|
|
|
{# 调用自定义标签load_sidebar,参数linktype可能控制侧边栏内容(如热门标签、相关分类)#}
|
|
|
|
{% load_sidebar user linktype %}
|
|
|
|
{% load_sidebar user linktype %}
|
|
|
|
{% endblock %}
|
|
|
|
{% endblock %}
|