Jekyll Markdown 内部链接

175

Jekyll使用Markdown格式的链接,但我如何链接到内部内容?

[[link]] 
8个回答

288

18
如何在页面内部添加链接? - Dogweather
2
似乎无法链接到页面。此PR未合并即被关闭:https://github.com/jekyll/jekyll/pull/369 - northben
1
有没有可能通过一个简单的命令轻松地显示标题,例如将其渲染为[帖子标题](/正确的永久链接)?我只能通过过滤来实现,但这太冗长了。 - Ciro Santilli OurBigBook.com
如果您有子目录:[Link's Text]({% post_url /dirname/2010-07-21-post %}) - alexsalo
只是一个小提示:在2010-07-21-post-name中不要包含扩展名。 - teardrop
这对我很好用 [pivot]({% post_url 2015-02-03-pivot.md %}) -- 使用了 post_url 和文件扩展名。 - Amanda

75
现在可以使用 link 标签链接到页面,不仅限于文章。该标签适用于文章、页面、集合中的文档和文件。
{{ site.baseurl }}{% link _collection/name-of-document.md %}
{{ site.baseurl }}{% link _posts/2016-07-26-name-of-post.md %}
{{ site.baseurl }}{% link news/index.html %}
{{ site.baseurl }}{% link /assets/files/doc.pdf %}

使用link标签创建链接时,请记得包含文件扩展名。 创建链接的方法如下:

[Link to a document]({{ site.baseurl }}{% link _collection/name-of-document.md %})
[Link to a post]({{ site.baseurl }}{% link _posts/2016-07-26-name-of-post.md %})
[Link to a page]({{ site.baseurl }}{% link news/index.html %})
[Link to a file]({{ site.baseurl }}{% link /assets/files/doc.pdf %})

查看Jekyll文档


3
我也发现这个文档页面很有帮助 - https://jekyllrb.com/docs/liquid/tags/#link - David Douglas
3
我刚发现在生成的超链接中,不需要使用{{ site.baseurl }},因为它会使baseurl的值翻倍。可以用{% link _posts/2016-07-26-name-of-post.md %}来链接到一个文章。 - oleksa
4
您需要在 Jekyll 3.x 中使用 site.baseurl,但在 4.x 中不再需要。但据我所知,GitHub Pages 仍然停留在最高版本为 3.x。 - Henry Schreiner

26

对于页面,他们决定不添加一个 page_url 标签,因为你仍然需要知道页面的路径。所以你只能手动链接到它:

[My page](/path/to/page.html)

如果你想编写程序获取页面的标题,也可以像这样做一些复杂而丑陋的操作:

{% for page in site.pages %}
  {% if page.url == '/path/to/page.html' %}
[{{ page.title }}]({{ page.url }})
  {% endif %}
{% endfor %}

1
正如另一个答案所指出的那样,有一个 {% link ... %} 标签建议使用,因为它有助于确保链接正确生成,并且如果链接损坏会给出错误提示。请参阅 https://jekyllrb.com/docs/liquid/tags/#link - Simon East

25
如果内部内容与同一页,则可以使用auto_ids功能将其链接到该页面。您可以在_config.yml中启用此功能:
kramdown:
    auto_ids: true

启用此功能后,每个标题都会基于标题文本获得一个id引用。例如:
### My Funky Heading

将变成

<h3 id="my-funky-heading">My Funky Heading</h3>

您可以通过像这样做到从同一文档内链接至此:

The funky text is [described below](#my-funky-heading)

如果您愿意,可以分配一个明确的ID:

### My Funky Heading
{: #funky }

并链接到它

The funky text is [described below](#funky)

即使您想引用其他元素而不是标题,这也可以正常工作。 - Antônio Medeiros
这也可以扩展到其他页面中的链接。例如:[文本](/路径/到/文件/#时髦) - Robur_131
请注意,kramdownauto_ids功能默认为true,因此只要您不在_config.yml中明确禁用它,它就会启用。 - mefryar

9

在Jekyll中有多种链接方式,其中一些已经过时。

使用链接标签

链接到内部文件的推荐方式是:

[Link]({{ site.baseurl }}{% link path/to/file.md %})

请注意,如果文件被移动或删除,这将导致错误。
使用永久链接:
为了链接到一个页面而不会导致错误(出现损坏的链接),请执行以下操作:
[Link]({{ '/path/to/page/' | relative_url }})

请注意,在这里您需要知道页面的永久链接,并通过relative_url过滤器传递它,以确保它带有站点的基本URL前缀。
页面的永久链接取决于配置文件中的permalink设置和文件的front matter中的permalink键。
使用jekyll-relative-links
如果您想使用相对路径(并希望链接在GitHub的markdown视图中工作),则应使用jekyll-relative-links。这使您可以编写如下链接:
[Link](./path/to/file.md)

[Link to file in parent folder](../file.md)

2

想象一下这是你的项目目录:

project directory

要将 "index.md" 链接到文件夹 "blog" 中名为 "20190920-post1.md" 的文件,按照以下步骤操作:

  1. 打开文件 "index.md"。
  2. 添加以下内容:

    [任意文本](./相对路径)

例如:

- [Sept 20th 2019 - Kikucare's Journey](./blog/20190920-post1.md)

输出:

在此输入图像描述


(注:本文为IT技术相关内容,仅供参考,不提供解释)

如果Jekyll保留了对.md文件的链接并没有将其转换为.html,那么应该激活插件https://github.com/benbalter/jekyll-relative-links。 - koppor

0

Jekyll 3.9.x 中的工作:

在 HTML 中: <a href="{{ '/blog/' | relative_url }}">链接到博客</a>


0

2023年9月

Jekyll不知道你想要包含哪篇文章,所以你需要包含完整的文件名。 你不需要包含文件的扩展名。

日期提醒
请注意文件名和输出在<p>标签内的日期类别是不同的。这是因为文章在Front Matter中有一个不同的日期。当页面渲染为HTML时,它会查看Front Matter中的日期。

{% post_url 2023-09-28-test-page %}

<!-- outputs this -->
<p>/2023/01/02/test-page.html</p>

显示正确的URL

您需要用括号()将Liquid包裹起来,并使用[ ]来包含您的锚文本。

[A Test Page]({% post_url 2023-09-28-test-page %})

<!-- outputs this -->
<p><a href="/2023/01/02/test-page.html">A Test Page</a></p>

链接后重命名文件

如果在链接后重命名您的文章文件,Jekyll将会报错。

Error: Could not find post "2023-09-28-test-page" in tag 'post_url'. 
Make sure the post exists and the name is correct.
Error: Run jekyll build --trace for more information.

包含属性

您可以使用花括号来包含您的属性。请注意冒号在开头。

[A Test Page]({% post_url 2023-09-28-test-page %}){:target="_blank"}

<!-- outputs this -->
<p><a href="/2023/01/02/test-23-page.html" target="_blank">A Test Page</a></p>

包含多个属性

要包含更多属性,您可以像常规的HTML属性一样添加它们,后面跟一个空格。

[A Test Page]({% post_url 2023-09-28-test-page %}){:target="_blank" class="active"}

<!-- outputs this -->
<p><a href="/2023/01/02/test-23-page.html" target="_blank" class="active">A Test Page</a></p>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接