雨果:不要在页面中转义HTML在header.html部分中生成<title>标签时的标题

问题描述

在基于雨果的网站中,我经常在帖子标题中使用<span>标签。我遇到了一个问题,该HTML总是在一个特定的上下文中转义。例如,举一个帖子,其中Markdown文件标题中给出的标题如下:

title: 'This is a title with Spanish: <span lang="es">Hola!</span>'

在我的Hugo主题的single.html部分中,<h2 class="posttitle">{{ .Title | markdownify }}</h2>正常工作,它将This is a title with Spanish: <span lang="es">Hola!</span>传递到页面的最终HTML。

但是,在我的Hugo主题的header.html部分中,<title>{{ .Title | markdownify }}</title> 有效。相反,Hugo将转义的字符串传递到页面的最终HTML:<title>This is title with Spanish: &lt;span lang=&#34;es&#34;&gt;Hola!&lt;/span&gt;</title>

如何在header.html中实现与single.html相同的行为?

编辑:我的主题非常简单,hugo-xmin主题变化很小。我主题的header.html部分如下:

<!DOCTYPE html>
<html lang="{{ .Site.LanguageCode }}">
  <head>
    <Meta charset="utf-8">
    <Meta name="viewport" content="width=device-width,initial-scale=1">
    <title>{{ .Title | markdownify }} &#124; {{ .Site.Title }}</title>
    <link rel="stylesheet" media="screen" href="{{ "/css/style.css" | relURL }}" />
    <link rel="stylesheet" media="screen" href="{{ "/css/screen.css" | relURL }}" />
    {{ partial "head_custom.html" . }}
  </head>
  <body>
    <h1 id="sitetitle">.Site.Title</h1>
    <p id="sitedescription">{{ $.Site.Params.description }}</p>
    <nav>
    <ul class="menu">
      {{ range .Site.Menus.main }}
      <li><a href="{{ .URL | relURL }}">{{ .Name }}</a></li>
      {{ end }}
    </ul>
    <hr/>
    </nav>

和我主题的single.html文件如下:

{{ partial "header.html" . }}
<main>
<div class="article-Meta">
<h2 class="posttitle">{{ .Title | markdownify }}</h2>
Published on <a href="{{ .RelPermalink }}"><time>{{ .Date.Format "2006-01-02" }}</time></a>
</div>
{{ .Content }}
</main>

{{ partial "footer.html" . }}

解决方法

如果要避免转义,应使用safeHTML函数。

{{ .Title | safeHTML }}

这不是可行的解决方案。即使将此函数放在header.html部分中,HTML仍会继续转义。

这可能是较早版本的Hugo的问题,我在v0.74.3上使用,并且似乎按预期运行。如果您没有使用最新版本,则可能要使用upgrade,如果无法升级,则可能要使用discourse

,

我下载了您的nonworking-blog最小示例,并通过执行以下两项操作来解决您的问题:

  1. 将以下内容放在config.toml的底部:
[outputFormats]
  [outputFormats.html]
    isPlainText = true
  1. layouts/_default/list.html中注释掉第34行,因此现在看起来像这样:
{{/*
{{ template "_internal/pagination.html" . }}
*/}}

我之所以做#2,是因为它产生了一个错误,我现在没有时间去研究,但是解决您的问题的关键是outputFormatshttps://gohugo.io/templates/output-formats/对此进行了讨论,特别是这个:

isPlainText
使用Go的纯文本模板解析器作为模板。 默认:否。

如果有人知道如何解决34行问题,我很乐意理解。

顺便说一句,我在Infinite Ink网站上使用isPlainText = true已有一年多了,到目前为止没有任何问题(但我没有使用任何{{ template … }}通话)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...