Jekyll 使用 Ruby 从 url 中提取文件名

Phi*_*ide 1 ruby liquid jekyll

我正在尝试使用以下 ruby​​ 片段从 Jekyll 上的 url 中提取文件名:

\n\n
{% assign filename = page.url.split(\'/\')[-1] | replace: \'.html\', \'.md\' %}\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我只是使用:

\n\n
{% assign filename = page.url | replace: \'.html\', \'.md\' %}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我用替换的文件类型取回了 url,但我的.split(\'/\')[-1]似乎不起作用。

\n\n

我尝试在独立的 ruby​​ 中运行以下命令以确保我的语法正确,并且它bird按预期返回:

\n\n
"cat/dog/b\xc2\xadird".split\xc2\xad(\'/\')[-1]\n
Run Code Online (Sandbox Code Playgroud)\n\n

为什么相同的语法在我的 Jekyll 实例中不起作用?是不是page.url字符串,还是其他东西?

\n

mar*_*nuy 5

问题在于将 ruby​​ 代码与 Liquid 标签混合在一起。

\n\n

要从 Jekyll 中的 url 中提取文件名,您可以仅使用纯 Liquid 模板过滤器,使用您尝试过的等效项:

\n\n
    \n
  • .split\xc2\xad(\'/\')->| split: \'/\'
  • \n
  • [-1]->| last
  • \n
\n\n

以自定义 URL 为例:

\n\n
{% assign url_example = "cat/dog/bird.html" %}\n{% assign filename = url_example | split: \'/\' | last | replace: \'.html\', \'.md\' %}\n{{filename}}\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出:

\n\n
bird.md\n
Run Code Online (Sandbox Code Playgroud)\n