【免费下载链接】pelicanStatic site generator that supports Markdown and reST syntax. Powered by Python.项目地址https://gitcode.com/gh_mirrors/pe/pelican点击查看免费下载Pelican 是一个用 Python 编写的静态站点生成器它让你通过撰写 Markdown、reStructuredText 乃至 HTML 文本文件来搭建网站无需数据库与任何服务端编程。本文将以本仓库的 README 为主线结合 Pelican 源码、示例配置 与 文档 深入剖析其核心能力、工作原理、CLI 用法与配置体系读完即可掌握从零构建、预览并发布一个纯静态博客或网站的完整流程。Pelican 是什么Pelican 的定位非常明确一个由 Python 驱动的静态站点生成器。它通过组合 Markdown、reStructuredTextreST与 HTML 等纯文本文件来构建网站生成的产物是完全静态的 HTML、CSS 与 JavaScript可以部署到任何 Web 服务器或托管服务上——不需要数据库不需要 PHP/Node 等运行时也不涉及任何服务端编程。从架构上理解Pelican 做的事情非常朴素读取一批源文件处理并输出为另一种形式的文件。在 docs/internals.rst 中官方将其概括为输入通常是 reST 和 Markdown 文件输出通常是一个博客但输入与输出其实可以是任何你想要的东西。下面是 README 对应的整体流程示意图片来源 docs/_static/overall.png从上图可以清晰看到 Pelican 的数据流左侧的 reStructuredText、Markdown、图片等源内容加上 Theme主题模板与 Settings配置进入核心的 Pelican 处理引擎最终输出右侧的 HTML 博客页面、RSS 订阅源、标签页与分类页。Pelican 提供的四大核心能力README 开篇列举了使用 Pelican 可以完成的功能每一条都可以在源码中找到对应的实现支撑1. 用任意编辑器撰写 Markdown 或 reStructuredText 内容Pelican 通过**读者Readers**机制解析不同格式的源文件。在 pelican/readers.py 中BaseReader是读取器的基类它要求子类具备三个关键属性enabled布尔值是否启用该读取器通常取决于对应依赖如markdown包能否成功导入file_extensions该读取器负责处理的文件扩展名列表extensions读取器内部使用的扩展典型如 Markdown 扩展。每个读取器实现一个read方法返回两个值HTML 格式的内容与元数据字典作者、标签、分类、日期等。仓库的测试用例覆盖了大量内容格式与元数据组合例如 pelican/tests/content/ 下的article_with_markdown_and_footnote.md、article_with_capitalized_metadata.rst、article_with_metadata.unknownextension等印证了 Markdown、reST 乃至未知扩展名内容的解析逻辑。元数据的处理在readers.py的METADATA_PROCESSORS中定义例如tags会被转换成Tag对象列表date/modified会被解析为日期对象category、author、authors、slug也都有对应的处理器。2. 简单的命令行工具重新生成 HTML、CSS 和 JSPelican 的命令行入口位于 pelican/main.py参数解析逻辑在 pelican/init.py 的parse_arguments函数中。核心参数包括参数说明path位置参数内容文件所在目录例如pelican content-o / --output输出目录默认在当前路径下创建output-s / --settings指定设置文件若当前目录存在pelicanconf.py则自动使用-d / --delete-output-directory生成前删除输出目录-r / --autoreload监听内容/主题/设置变更并自动重新生成-l / --listen通过 HTTP 在 8000 端口提供输出内容预览-p / --port、-b / --bind预览服务的端口与绑定 IP-e / --extra-settings以KEYVALUE形式覆盖设置VALUE必须是 JSON 语法--print-settings打印当前生效的全部设置可跟一个或多个设置名精确查看--fatal遇到errors或warnings时以非零状态退出-v / -q / -D分别对应 INFO / CRITICAL / DEBUG 日志级别--version打印版本号并退出例如最基本的站点生成命令是pelican content该命令把content/目录下的源文件生成到output/目录中本地开发时出现 feeds 相关警告属正常现象可忽略。3. 易于与版本控制系统和 Web hooks 集成由于 Pelican 的一切输入都是普通文本文件内容天然适合纳入 Git 等版本控制系统管理配合 CI/CD 流水线或 Web hooks可以在每次提交后自动重新生成并部署站点。另外在配置层面docs/settings.rst 记录了OUTPUT_RETENTION这一设置允许指定一组文件名在清空输出目录时被保留一个典型用途就是保留版本控制数据OUTPUT_RETENTION [.hg, .git, .bzr]4. 完全静态的输出可托管在任意位置生成的输出目录是自包含的静态文件可以上传到任何静态托管服务或由任意 Web 服务器直接提供。Pelican 还自带一个用于本地预览的 HTTP 服务--listen选项其实现位于 pelican/server.py。功能特性详解README 九大亮点逐一拆解README 的 Features 一节列出了九项功能亮点下面结合仓库源码逐一展开。1. 时间顺序内容文章/博客与静态页面并存Pelican 区分**文章Articles与页面Pages**两类内容二者的类定义都在 pelican/contents.py 中。文章按时间倒序排列并参与归档、feed 生成页面则更接近关于我项目这类不依赖时间的静态入口。生成逻辑由 pelican/generators.py 中的ArticlesGenerator与PagesGenerator分别负责。2. 与外部服务的集成Pelican 通过设置项支持接入评论如 Disqus、社交链接Twitter、GitHub、分析统计等外部服务。以 samples/pelican.conf.py 为例DISQUS_SITENAME blog-notmyidea SOCIAL [ (twitter, http://twitter.com/ametaireau), (lastfm, http://lastfm.com/user/akounet), (github, http://github.com/ametaireau), ]主题模板层面对应有 notmyidea 主题的模板 中的analytics.html、disqus_script.html、github.html、twitter.html等片段。3. 基于 Jinja2 模板的站点主题Pelican 的主题系统完全构建在 Jinja2 之上。在 pelican/generators.py 的Generator基类中Pelican 通过ChoiceLoader组合了多个模板加载源用户通过THEME_TEMPLATES_OVERRIDES指定的覆盖模板、主题目录下的templates/、内置的 simple 主题模板作为隐式继承的兜底以及!simple/!theme前缀的显式加载。仓库内置了两个主题功能齐全的 notmyidea 主题含base.html、index.html、article.html、tags.html、archives.html等全套模板和极简的 simple 主题。你还可以通过JINJA_FILTERS、JINJA_GLOBALS、JINJA_TESTS三个设置向 Jinja2 环境注入自定义过滤器、全局变量与测试函数。4. 多语言文章发布Pelican 原生支持多语言内容一篇文章可以有多个翻译版本通过ARTICLE_TRANSLATION_ID/PAGE_TRANSLATION_ID默认基于 slug关联。翻译版本之间自动生成语言切换链接对应模板见 notmyidea 主题的 translations.html。同时DATE_FORMATS、DEFAULT_LANG、TRANSLATION_FEED_ATOM等设置配合实现按语言输出 feed。仓库测试 pelican/tests/content/ 中的another_super_article-fr.rst、article2-fr.rst等法文内容即用于验证这一能力。5. Atom 与 RSS 订阅源生成Feed 的生成由 pelican/writers.py 中的Writer完成它借助feedgenerator库创建Atom1Feed或Rss201rev2Feed。相关设置包括FEED_ALL_ATOM默认feeds/all.atom.xml、CATEGORY_FEED_ATOM、AUTHOR_FEED_ATOM、TRANSLATION_FEED_ATOMFEED_MAX_ITEMS默认 100feed 最大条目数RSS_FEED_SUMMARY_ONLY默认TrueRSS 的description只放摘要而非全文FEED_APPEND_REF是否在 feed 链接后追加?reffeed引用标记。writer 在写入每个条目时还通过signals.content_written、feed_generated、feed_written等信号向外广播供插件介入。6. 基于 Pygments 的代码语法高亮Pelican 对 reST 与 Markdown 中的代码块均支持 Pygments 高亮。对于 Markdown默认配置见 pelican/settings.py 中的MARKDOWN设置启用了markdown.extensions.codehilite并指定css_class: highlight对于 reST可通过PYGMENTS_RST_OPTIONS定制示例配置中设置了带行号的表格形式PYGMENTS_RST_OPTIONS {linenos: table}7. 从 WordPress、Dotclear 或 RSS 导入已有内容Pelican 提供了内容导入工具 pelican/tools/pelican_import.py可以把 WordPress XML 导出、Dotclear 博客或 RSS feed 转换为 Pelican 的 Markdown/reST 内容文件。仓库测试数据 pelican/tests/content/wordpressexport.xml 与 pelican/tests/content/bloggerexport.xml 正是导入测试的输入样本对应测试见 pelican/tests/test_importer.py。8. 内容缓存与选择性输出写入带来的快速重建这是 Pelican 在快速上的关键设计。缓存机制实现在 pelican/cache.pyFileDataCacher将解析结果序列化默认 gzip 压缩见GZIP_CACHE存储到CACHE_PATH默认cache目录FileStampDataCacher进一步缓存文件的时间戳/校验和只有发生变化的文件才会被重新解析。相关设置包括CACHE_CONTENT、CONTENT_CACHING_LAYER默认reader层、CHECK_MODIFIED_METHOD默认基于 mtime与LOAD_CONTENT_CACHE。同时Writer会跟踪已写入的文件_written_files、_overridden_files默认不覆盖已被写过的目标文件除非显式声明 override——这就避免了无谓的重复磁盘写入。官方文档特别提示当调整元数据相关设置而看不到变化时通常是缓存干扰所致此时应设置LOAD_CONTENT_CACHE False或使用--ignore-cache命令行开关。9. 丰富的插件生态系统Pelican 的扩展性由信号signals机制与插件加载器共同保证信号定义在 pelican/plugins/signals.py基于blinker库涵盖运行级信号initialized、get_generators、all_generators_finalized、get_writer、finalized、读取器级信号readers_init、生成器级信号article_generator_init、page_generator_finalized等以及页面级与写入器级信号插件可以通过订阅这些信号在生成流程的各个阶段注入逻辑插件加载逻辑在 pelican/plugins/_utils.py 的load_plugins中配合PLUGIN_PATHS与PLUGINS设置使用init_plugins会逐个调用插件的register()方法并把最终注册成功的插件名回写进PLUGINS设置。从 pelican/init.py 中可以看到Pelican.run()的执行顺序是构建生成器列表文章、页面、模板页、源文件、插件新增生成器最后是 StaticGenerator→ 删除输出目录若启用且输出目录不包含内容目录→ 各生成器generate_context()→ 广播all_generators_finalized→ 各生成器generate_output(writer)→ 广播finalized。StaticGenerator被刻意排在最后以便识别被其他生成器跳过的文件并让静态文件输出路径可以被{attach}链接语法覆盖。快速上手十分钟生成你的第一个站点下面流程综合了 docs/quickstart.rst 与仓库实测内容。第一步安装python -m pip install pelican[markdown][markdown]附加依赖会一并安装 Markdown 支持如果你只用 reST 格式装pelican本体即可。第二步创建项目骨架mkdir -p ~/projects/yoursite cd ~/projects/yoursite pelican-quickstartpelican-quickstart会以问答方式生成 pelican/tools/templates/ 下的pelicanconf.py、publishconf.py、Makefile、tasks.py等模板文件。带方括号默认值的问题直接回车即可URL 前缀请填你的域名如https://example.com。第三步创建第一篇内容用任意编辑器在content/目录下创建keyboard-review.mdTitle: My First Review Date: 2010-12-03 10:20 Category: Review Following is a review of my favorite mechanical keyboard.前几行Title:/Date:/Category:是元数据空行之后是正文。第四步生成站点pelican content站点生成在output/目录。若要同时指定设置文件、清空输出目录可以组合使用pelican content -s pelicanconf.py -d第五步本地预览pelican --listen浏览器访问http://localhost:8000/即可预览。开发迭代时还可以用-r开启自动重载让 Pelican 在内容、主题或设置文件变化时自动重新生成pelican content -r --listen深入配置体系Pelican 的设置以Python 模块文件的形式存在默认pelicanconf.py所有设置标识符必须全大写否则不会被处理。设置值遵循 Python 语法数字、布尔值、字典、元组不加引号字符串必须加引号。除特别说明外路径设置可以是绝对路径或相对于配置文件所在目录的路径。设置会传递给模板因此也可以在模板中直接使用自定义设置项。一份完整的参考配置见 samples/pelican.conf.py其关键片段AUTHOR Alexis Métaireau SITENAME Alexis log SITEURL http://blog.notmyidea.org TIMEZONE Europe/Paris # 开发时方便正式发布时改为 False RELATIVE_URLS True DEFAULT_PAGINATION 4 FEED_ALL_RSS feeds/all.rss.xml CATEGORY_FEED_RSS feeds/{slug}.rss.xml # 作用于所有内容的全局元数据 DEFAULT_METADATA {yeah: it is} # 路径级元数据把 extra/robots.txt 输出为 robots.txt EXTRA_PATH_METADATA {extra/robots.txt: {path: robots.txt}} # 静态路径原样复制不做解析 STATIC_PATHS [images, extra/robots.txt] # 用 Jinja2 模板生成自定义页面 TEMPLATE_PAGES {pages/jinja2_template.html: jinja2_template.html} # 关闭 HTML 内容的读取示例站点没有其他 HTML 内容 READERS {html: None}值得注意的是文件末尾那行小写foobar barbaz——它特意演示了非全大写键不会被当作设置处理的规则。另一个实用命令是--print-settings它打印当前环境的全部生效设置含默认值与自定义值也可跟一个或多个设置名精确查看pelican --print-settings pelican --print-settings SITEURL THEME默认设置全表位于 pelican/settings.py 的DEFAULT_CONFIG字典包括内容路径ARTICLE_PATHS、PAGE_PATHS、URL 结构ARTICLE_URL、TAG_URL、PAGINATION_PATTERNS、分类与标签USE_FOLDER_AS_CATEGORY、DEFAULT_CATEGORY、日期格式DEFAULT_DATE_FORMAT以及前文提到的缓存与 feed 相关设置完整参数说明可查阅 docs/settings.rst。为 Pelican 扩展新能力Pelican 的内部设计刻意保持简单核心抽象只有四类详见 docs/internals.rstWriters写入器负责写文件HTML、RSS 等创建一次后传给各生成器复用Readers读取器从各种格式读取内容返回元数据与 HTML 内容系统可扩展Generators生成器生成各类输出内置ArticlesGenerator与PagesGeneratorTemplates模板基于 Jinja2 的主题语法易于自建主题。新增一种标记语言只需要实现一个带read方法的类。read方法返回 HTML 内容与元数据字典如果新格式依赖额外 Python 包记得用try...except包裹 import并在类上设置enabled属性标记依赖是否可用这样用户就不必为不使用的格式安装多余依赖。同样地自定义生成器只需实现generate_context先生成并更新共享上下文与generate_output后写文件两个方法框架只调用存在的方法。源码结构导航pelican/init.pyCLI 参数解析、Pelican主类与run()生成流水线pelican/readers.pyMarkdown/reST/HTML 读取器与元数据处理器pelican/generators.py文章、页面、静态文件等生成器与 Jinja2 环境装配pelican/writers.pyHTML 写入与 Atom/RSS feed 生成pelican/settings.py默认配置表与设置文件读取pelican/contents.pyArticle/Page/Static 等内容对象模型pelican/cache.py内容缓存与选择性加载pelican/plugins/信号定义与插件加载pelican/tools/pelican-quickstart、pelican_import、pelican_themes等辅助工具pelican/tests/覆盖上述各模块的完整测试套件samples/可直接运行的示例站点与配置docs/完整用户文档settings、internals、themes、faq 等。为什么叫 PelicanREADME 给出了一个有趣的小知识Pelican 是法语单词calepin意为笔记本的字母重排anagram。这个名字也暗合了项目把散落文本整理成站点的定位。获取帮助与参与贡献如果你想贡献代码、报告问题或提供反馈请阅读仓库的 CONTRIBUTING.rst 了解贡献与反馈指南。源码的核心实现、测试与文档都在本仓库中配合本文引用的各文件路径即可按图索骥深入理解 Pelican 的每一处细节。赞分享【免费下载链接】pelicanStatic site generator that supports Markdown and reST syntax. Powered by Python.项目地址https://gitcode.com/gh_mirrors/pe/pelican点击查看免费下载相关推荐Pelican 静态站点生成实战从 reST 文章元数据到源码级原理剖析Pelican 静态站点生成实战从 reST 文章元数据到源码级原理剖析 导读 super_article.rst 是 Pelican 官方仓库本仓库路径如何部署WhirlwindTourOfPython网站Pelican静态站点生成实战如何部署WhirlwindTourOfPython网站Pelican静态站点生成实战 WhirlwindTourOfPython是一个基于Jupyter No从Markdown到惊艳网站Bisheng静态站点生成器终极指南从Markdown到惊艳网站Bisheng静态站点生成器终极指南 Bisheng是一个强大的静态站点生成器能够将Markdown文件转换为使用React构建创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
压缩感知重构信号:MATLAB实现FISTA与OMP算法及参数调优 简介:这份MATLAB源码包面向信号处理、无线通信与图像处理方向的学习者和工程师,聚焦压缩感知(CS)理论中从低采样率测量值恢复稀疏信号的核心问题。包内共18个文件,以17个.m脚本和1个.fig图形文件为主,压缩包… · 2026/9/23 17:41:31
仓库托盘检测为何必须用YOLO+VOC双格式数据集 简介:本资源是面向计算机视觉初学者与工业检测开发者的目标检测专用数据集,聚焦仓库场景下的托盘识别任务,可直接用于YOLO、Faster R-CNN等主流模型的训练与评估。压缩包共2000个文件,含1182张高清JPG图像、1182份VOC格式XML标注&… · 2026/9/23 17:41:25
法研杯2019相似案例匹配实战:法律文本相似度建模与避坑指南 简介:法研杯2019相似案例匹配第二名解决方案,附带CAIL2020/2021司法考试赛道冠军团队材料,是一份面向法律人工智能与自然语言处理竞赛选手及研究者的完整工程代码包。方案覆盖法律文本相似度匹配与司法考试自动答题两条任务线,围绕… · 2026/9/23 18:16:15
以图搜图工具硬核实测:从感知哈希到特征向量,五大引擎横评 手机里存了一张图,你不知道它的出处;电商页面上看到一件商品,你想搜同款比价;刷到一张被疯狂转发但画质糊成马赛克的梗图,你想找清晰原图;又或者你是个内容创作者,自己的图被搬运了,… · 2026/9/23 18:16:15
图解IP产业底层逻辑,3步搞定环境配置不卡壳 图解IP产业底层逻辑,3步搞定环境配置不卡壳 配置环境就卡半天?别慌,这锅不在你。 很多新人一上来就对着文档死磕,结果越配越乱,最后怀疑人生。 其实,IP产业的核心在于“连接”与“流转”,而图解原理就是打破黑盒的最快路径。 一、… · 2026/9/23 18:16:08
电子婚礼邀请函渲染卡顿?3个坑一文搞懂优化 电子婚礼邀请函渲染卡顿?3个坑一文搞懂优化 盯着屏幕上的 Uncaught TypeError: Cannot read properties of undefined (reading 'map') ,再往上翻几十行堆叠的… · 2026/9/23 18:16:02
上海专升本机构怎么选择?主要看5点!(2026版) 一句话结论:选上海专升本机构,重点看五件事——办学平台、考纲教研、师资身份、资料质量、服务闭环。上海专升本是各招生院校自主命题、先填志愿再考试,资料差一代人就等于白复习一年。一、先说清楚:上海专升本为什么难选特殊规则… · 2026/9/23 18:16:02
ComfyUI中Supir超分辨率原理与实战配置指南 简介:本资源是面向ComfyUI图像处理初学者与AIGC开发者的轻量级Supir超分辨率缩放工作流配置方案,聚焦于快速部署高质量图像放大能力。压缩包仅含1个核心JSON文件(4KB),为ComfyUI节点图的完整流程定义,可直接… · 2026/9/23 18:16:02
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29