【问题标题】:In HUGO - How to read query parameters in templateIn HUGO - 如何读取模板中的查询参数
【发布时间】:2020-10-09 11:03:26
【问题描述】:

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

/list-page/?{{(querify "somekey" "value")}}

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

【问题讨论】:

    标签: templates hugo


    【解决方案1】:

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

    MDN, Deeper dive into URLs

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

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

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

    此时,您仍然可以使用 JavaScript (URLSearchParams) 来解释这些参数并在现场修改页面。这意味着您正在增加 Hugo 站点的复杂性,以及客户端(浏览器)的更多负载。如果你真的需要那些查询字符串 Hugo,这就是你要走的路。

    另外,我的建议是尝试生成所有可能的 /list-page/ 变体并给它们起正确的名称,例如/list-page/category-1/list-page/category-1-with-fizz。这取决于您的用例、您拥有的页面数量以及它们的更改频率。 Hugo 在编译模板和创建大量页面方面非常快,所以我不用担心。结果确实是,您的输出中有更多文件,但这就是静态站点生成器的方式,并且提供静态 HTML 比实际应用程序服务器便宜,例如PHP、NodeJS。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-11
      • 2017-06-20
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多