在Jekyll中如何设置图片基础路径以简化博文图片引用?
解决方案
方案1:在文章布局中全局定义变量(最推荐,无插件,兼容GitHub Pages)
你完全不需要在每篇博文开头手动添加media变量赋值代码,直接把这段代码放到你所有博文使用的布局文件(通常为_layouts/post.html)的最顶部,放在{{ content }}输出标签之前即可:
{% assign media = site.baseurl | append: "/assets/img/" | append: page.path | replace: ".md","" | replace: "_posts/","" %}
配置完成后,所有使用该布局的博文都会自动拥有media变量,直接按照你理想的写法插入图片即可:

方案2:自定义Liquid标签(适合本地构建/自定义构建环境)
你之前开发插件失败是因为没有正确从上下文获取页面对象,且不需要输出Liquid代码再二次解析,直接在标签逻辑里完成路径拼接输出最终字符串即可:
- 在项目根目录创建
_plugins文件夹(如果不存在),在文件夹内新建media_tag.rb,写入以下代码:
module Jekyll class MediaPathTag < Liquid::Tag def initialize(tag_name, input, tokens) super @filename = input.strip end def render(context) # 从上下文获取当前页面和站点配置 page = context.registers[:page] baseurl = context.registers[:site].config['baseurl'] || '' # 拼接完整路径 post_slug = page['path'].gsub('.md','').gsub('_posts/','') "#{baseurl}/assets/img/#{post_slug}/#{@filename}" end end end # 注册标签 Liquid::Template.register_tag('media_path', Jekyll::MediaPathTag)
- 博文中插入图片的写法简化为:

你也可以根据需求修改标签逻辑,直接输出完整的<img>标签或者markdown图片语法,进一步简化调用。
内容的提问来源于stack exchange,提问作者edoelas
相关产品推荐
相关产品推荐

