跳转至

新版博客!

最近重写了本站的博客板块,现在可以自动列出最近更新的几条博客了。

核心的代码就是:

{% set recent_blog_pages=[] %}
{% for p in (pages | sort(attribute="page.meta.git_creation_date_localized", reverse=True)) %}
    {% set page=p.page %}
    {% if page.meta.tags and ("blog" in page.meta.tags) %}
        {{ recent_blog_pages.append(page) or ""}} 
    {% endif %}
{% endfor %}

{% for page in recent_blog_pages[:3] %}
    <details class="quote">
    <summary>{{ page.meta.git_creation_date_localized }} posted: {{ page.title }}</summary>
    <br>
    {{ page.content }}
    {% if page.meta and page.meta.git_revision_date_localized %}
        {% include "partials/source-file.html" %}
    {% endif %}
    </details>
{% endfor %}

熟悉Django的同学可能一眼就发现,这是jinjia2的模版语法。其中pagesmkdocs在渲染过程中构造的变量,它包含了所有的页面。通过对git_creation_date_localized的逆向排序,我们就可以选出最近更新的三条blog了。呈现的形式我选择了details class="quote",对应于mkdocs-material的callout语法。关于pages这个变量,更加详细的内容可以参考mkdocs develop guide

实在不是很优雅的实现方式,但也满足我的基本设想了。

mkdocs-material

本来是想用mkdocs-material自带的blog插件的,但是发现最新的版本已经太高了(现在已经更新到了9.5.17,而我还在用8.5.11)感觉会出很多兼容性问题。

并且我看了一眼,他们做的Blog未免有些太复杂,需要我提供很多meta信息才能正确渲染(尤其是日期!居然不能自动读取git日期)。

DIY插件

也有其他人做的插件,比如https://blog.mcdic.net/这位哥的主页,写了一个自定义的Blog页面。我也是受他的启发才使用了现在的方案。

不过他是通过python源代码写的插件实现的,我是通过template文件实现的。

其他平台

我还看了很多其他的方案,比如https://www.ftls.xyz/posts/2023-08-13-mricoblog/这位哥提到的方案,看起来很炫酷、还能在手机上发Blog。但是好麻烦,于是放弃!


最后更新: 2024-04-03 19:02:21
创建日期: 2024-04-03 19:02:21

评论