在 HUGO 中 - 如何读取模板中的查询参数

mod*_*job 3 templates hugo

我有一个hugo 模板,我提供从一个页面到另一个页面的超链接。我想在 URL 中传递一些查询参数并在模板中读取它们。

/list-page/?{{(querify "somekey" "value")}}
Run Code Online (Sandbox Code Playgroud)

我想要做的是检查url 中/list-page/是否有 a 。?somekey=value如果有,我想根据传递的参数过滤列表。如果没有,我将显示整个列表。如果不清楚,我可以尝试解释更多。我已经尝试过{{ $value := (.Get "value") }} 但这会阻碍它。它根本不起作用。我正在使用Hugo Static Site Generator v0.55.6 任何帮助表示赞赏。

and*_*che 6

?key1=value1&key2=value2是提供给 Web 服务器的额外参数。这些参数是用 & 符号分隔的键/值对列表。Web 服务器可以在返回资源之前使用这些参数执行额外的操作。每个 Web 服务器都有自己的有关参数的规则,了解特定 Web 服务器是否正在处理参数的唯一可靠方法是询问 Web 服务器所有者。

MDN,深入研究 URL

这意味着当 HTTP 服务器收到您的 请求时GET /list-page/?somekey=value,它很清楚该特殊后缀,并且在您的服务器应用程序中,您可以根据该参数提供不同的响应。

就您而言,您正在使用nginxApache httpd之类的东西来提供您在请求之前构建的静态 HTML 文件。因此,您没有实际的应用程序来指示它以不同的方式处理该请求。

发生的情况是,您的 HTTP 服务器只是获取该文件 ( /list-page/index.html) 并将其提供给您的浏览器。它不会从/list-page/?somekey=somevalueto重定向/list-page/,因此浏览器中的 URL 仍附加有搜索参数,但它仍然是您生成的一个静态页面。

此时,您仍然可以使用 JavaScript ( URLSearchParams ) 来解释这些参数并当场修改页面。这意味着您会增加 Hugo 站点的复杂性,并增加客户端(浏览器)的负载。如果您确实需要这些查询字符串Hugo,那么这就是正确的选择。

或者,我的建议是尝试生成所有可能的/list-page/变体并给它们指定适当的名称,例如/list-page/category-1/list-page/category-1-with-fizz。这取决于您的用例、您有多少页面以及它们更改的频率。Hugo 编译模板和创建大量页面的速度相当快,所以我不担心这一点。事实上,结果是您的输出中有更多的文件,但这就是静态站点生成器的工作方式,并且提供静态 HTML 比实际的应用程序服务器(例如 PHP、NodeJS)更便宜。