3

我正在使用 Metalsmith 制作一个以 Handlebars 为模板的网站。

我创建了一个名为 /articles/index.html 的存档页面,它获取 /articles/ 中的所有文章并按时间顺序列出它们,但是当我点击存档页面中的链接时,它会将我带到 /articles/articles/example-post。 html 而不是 /articles/example-post.html。如何让它带我到 URL 的绝对版本而不是相对版本?

我用来生成存档的 Handlebars 脚本是:

{{#if archive}}
  <ul>
    {{#each collections.article}}
    <li><a href={{path}}>{{date}} - {{title}} {{description}}</a></li>
    {{/each}}
  </ul>
{{/if}}

{{path}} 元数据由 Metalsmith 自动生成。当我在生成的文件上调用 console.log 时,我得到如下输出:

'/articles/example-post/index.html':
  { title: 'Example Post',
  ...
  path: 'articles/example-post'
  ...
  }

我的主页上有一个几乎相同的设置,它的工作方式与它应该的完全一样。知道如何让它在子文件夹中运行吗?

编辑:好的,我应该清楚:我意识到 {{path}} 是一个相对链接,而不是一个绝对链接。我的问题应该是:“当我只有 {{path}} 可以使用并且它是相对的时,如何让它正常工作?是否有另一个我应该能够访问的变量会产生正确的链接,或者是否有一个如何编辑 {{path}} 使其指向正确的文件?据我所知,无法在 Handlebars 中编辑变量,因此我无法在链接上附加“/”或去掉前面的“文章/”。

4

2 回答 2

3

通常,最好使用相对 url 而不是绝对 url,因此您的应用程序不会绑定到该应用程序 env。

但是如果你需要使用absolute,你可以使用/path/to/somewhere而不是path/to/somewhere

它适用于您的主页但不适用于您的其他页面的原因是,当您在主页时,您的相对路径和绝对路径之间没有区别。当你在根部时,/location/path和是一样的。location/path

/这是将 a 放在前面的另一种选择:

<a href="/posts/{{../permalink}}#{{id}}">{{title}}</a>

于 2018-07-24T18:38:28.997 回答
0

最终,我最终在我的构建中使用了 metalsmith-paths,它为文件的元数据添加了一组路径,包括一个“href”路径,这基本上就是我想要的。

最终,我的脚本最终看起来像:

{{#if archive}}
  <ul>
    {{#each collections.article}}
    <li><a href={{paths.href}}>{{date}} - {{title}} - {{description}}</a></li>
    {{/each}}
  </ul>
{{/if}}

所以,是的,我使用的链接是错误的。

如果您碰巧需要像我想的那样直接“修复” Handlebars 中的链接,我仍然不确定要告诉您什么,但如果可能的话,它可能涉及帮助程序。

于 2018-07-24T20:09:39.640 回答