You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Jekyll中如何设置图片基础路径以简化博文图片引用?

解决方案

方案1:在文章布局中全局定义变量(最推荐,无插件,兼容GitHub Pages)

你完全不需要在每篇博文开头手动添加media变量赋值代码,直接把这段代码放到你所有博文使用的布局文件(通常为_layouts/post.html)的最顶部,放在{{ content }}输出标签之前即可:

{% assign media = site.baseurl | append: "/assets/img/" | append:  page.path | replace: ".md","" | replace: "_posts/",""  %}

配置完成后,所有使用该布局的博文都会自动拥有media变量,直接按照你理想的写法插入图片即可:

![]({{media}}/test.jpg)

方案2:自定义Liquid标签(适合本地构建/自定义构建环境)

你之前开发插件失败是因为没有正确从上下文获取页面对象,且不需要输出Liquid代码再二次解析,直接在标签逻辑里完成路径拼接输出最终字符串即可:

  1. 在项目根目录创建_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)
  1. 博文中插入图片的写法简化为:
![]({% media_path test.jpg %})

你也可以根据需求修改标签逻辑,直接输出完整的<img>标签或者markdown图片语法,进一步简化调用。


内容的提问来源于stack exchange,提问作者edoelas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 15:36:04