14

最近给了我一个网站的重新开发。重新设计的站点将在Markdown中完成,并通过Hugo 静态站点生成器运行。

有没有办法在通过 Hugo 处理的 Markdown 网页中包含其他文件?如果是这样,怎么做?除非我遗漏了什么,否则Hugo 文档中没有解决这个问题。

使用 HTML 和一些服务器(至少是 Apache),您可以执行以下操作:

<html>
<body>
Some content
<!--#include virtual="name_of_first_file_to_include" -->
More content
<!--#include virtual="name_of_second_file_to_include" -->
Still more content
</body>
<html>

我尝试创建一个模板页面,将“一些内容”和“更多内容”之类的内容放入模板中,然后将包含在我的 .md 文件中的内容通过模板中的 {{ .Content }} “包含”。但是,1)这似乎是使用模板的错误方式。2) 如果需要,我还没有找到一种方法来引入更多文件。

4

3 回答 3

18

对于内容文件,有两个选项:

  1. 简码。功能强大且有文档记录。
  2. 使用mmark它的特性作为降价渲染引擎include。将内容文件重命名为“*.mmark”。见https://github.com/miekg/mmark

我是 Hugo 的维护者。

于 2016-09-30T21:10:10.753 回答
13

我有一个自定义简码,用于通过 Markdown 将我的静态演示文件呈现为代码,它很简单:

布局/简码/code.html

{{ $file := .Get "file" | readFile }}
{{ $lang := .Get "language" }}
{{ (print "```" $lang "\n" $file "\n```") | markdownify }}

内容/post/some-post.md

 {{% code file="/static/some-script.js" language="js" %}}
于 2017-07-31T16:48:58.423 回答
3

一位同事建议创建一个简码来帮助解决这个问题。虽然这不是我的想法——它比我想要的更复杂——但还不错,而且我还没有找到更好的方法。因此,我使用简码和 CSV 文件实现了一个解决方案。简单的示例文件如下:

内容文件仍然(大部分)是 Markdown,看起来像:

+++
date = "2016-09-29"
title = "short_code_test"
type = "pages"
+++

## Short Code test

Test table should appear below:  

{{< display_table_csv "static/test_data.csv" >}}
  <tr><th>Name</th><th>Birthday</th>
{{< /test_table_shortcode >}}

(请注意,type = "pages"只是引入了一个模板,该模板修改/覆盖了 hugo-uno 默认 pages/single.html 模板,以使输出更清晰,以便在下面显示。)

布局/简码/display_table_csv.html:

<table>
  <thead>
      {{ .Inner }}
  </thead>
  <tbody>
  {{ $url := (index .Params 0) }}
  {{ $sep := "," }}
  {{ range $row_i, $row := getCSV $sep $url }}
  <tr>
    {{ range $col_i, $col := $row }}
    <td>{{ $col }}</td>
    {{ end }}
  </tr>
  {{ end }}
  </tbody>
</table>

静态/test_data.csv:

John, 1940-10-09
Paul, 1942-06-18
George, 1943-02-25
Ringo, 1940-07-07

这张图片显示了事物是如何呈现的: 简码测试截图

Hugo 文档中的数据驱动内容页面也很有帮助。

于 2016-09-29T17:58:25.533 回答