问题描述
在基于雨果的网站中,我经常在帖子标题中使用<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: <span lang="es">Hola!</span></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 }} | {{ .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>
{{ 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最小示例,并通过执行以下两项操作来解决您的问题:
- 将以下内容放在
config.toml
的底部:
[outputFormats]
[outputFormats.html]
isPlainText = true
- 在
layouts/_default/list.html
中注释掉第34行,因此现在看起来像这样:
{{/*
{{ template "_internal/pagination.html" . }}
*/}}
我之所以做#2,是因为它产生了一个错误,我现在没有时间去研究,但是解决您的问题的关键是outputFormats
,https://gohugo.io/templates/output-formats/对此进行了讨论,特别是这个:
isPlainText
使用Go的纯文本模板解析器作为模板。 默认:否。
如果有人知道如何解决34行问题,我很乐意理解。
顺便说一句,我在Infinite Ink网站上使用isPlainText = true
已有一年多了,到目前为止没有任何问题(但我没有使用任何{{ template … }}
通话)。