jekyll - 为所有帖子设置 URL 变量
问题描述
我正在尝试从 GitHub 页面帖子中引用图像。我一直在从布局中引用图像,为此我在我的 中使用了以下代码_layouts/default.html
:
{% assign custom_url = site.url | append: site.baseurl %}
{% assign full_base_url = custom_url | default: site.github.url %}
… href="{{ "/images/logo.png" | prepend: full_base_url }}" …
(我不确定我对前两行的理解如何,但它们似乎在实时页面和我的本地预览中都运行良好,所以我倾向于保留它们的语义。)
尝试仅复制帖子正文中的最后一行失败,导致没有任何附加内容。我假设该变量在帖子被渲染时不存在,只有当该渲染被插入布局时。在每篇文章中使用所有三行图像感觉有点重复。
我已经阅读了Jekyll Front Matter Defaults,它描述了如何为所有帖子执行设置,但这似乎只允许设置静态值,而不是像我在作业中所做的计算值。
我还阅读了如何在 Liquid 中定义全局变量?这似乎解决了同样的液体问题。但是这个问题非常简单,并且标记为 Shopify 而不是 Jekyll,所以有些答案对我来说并不适用。我从那里的答案中得到的要点是,也许我可以在某处以某种方式包含一些“片段”,但我不知道如何做到这一点,更不用说以不需要在每个帖子中添加行的方式做到这一点. 术语“片段”往往指代代码片段这一事实并没有使搜索指南变得更容易。
解决方案
在我的一个 Jekyll 项目中,我有同样的要求,和你一样,我没有找到一个非常明确的方法来做到这一点。
我挣扎了很长时间试图将它放入_config.yaml,但由于处理顺序,我意识到它永远不会起作用。
我最终得到的可能不是最干净的解决方案,我真的希望有人能提供比这个更好的解决方案,但它是:
在_includes文件夹中,我创建了一个variables.html文件,其中包含我知道可以在所有页面上使用的所有全局变量。
在您的情况下,文件_includes/variables.html将是
{% assign custom_url = site.url | append: site.baseurl %}
{% assign full_base_url = custom_url | default: site.github.url %}
然后在所有需要这些变量的布局中,我只需在 _layouts/default.html 之后包含variables.html文件DOCTYPE
,这是_layouts/default.html的简化示例:
<!DOCTYPE html>
{% include variables.html %}
<html>
<head></head>
<body>
{{ content }}
<a href="{{ '/images/logo.png' | prepend: full_base_url }}">Some image</a>
</body>
</html>
这样,您的变量custom_url
可以 在您使用默认布局的任何full_base_url
地方全局访问。
推荐阅读
- ejabberd - 使用特定信息识别用户
- pine-script - 如何记录具有买入信号的柱的柱位置 ID
- c# - 参考属性显示空白
- python - 简单的 UDP 应用程序未在 Python 中接收
- flutter - 使用平滑页面指示器在颤动的页面之间切换
- javascript - Javascript获取由另一个属性分组的最大值
- amazon-web-services - 在 AWS-API-Gateway 中通过 CLI 将集成附加到路由
- python - 检查字符串是否包含特定数量的字母和数字
- javascript - react 和 next.js 视差
- java - 如何在Java中交叉迭代两个arrayList?