0%

hexo中对{{}}的解析

最近在学习ng2,正巧博客也从wordpress换到了hexo,使用下来觉得还挺好的。

angular的模板语法使用两个大括号来表示的{{}},然后我的博客又整理的是学习笔记,那么自然不可避免的在博客中会插入代码,所以出现了这个问题:

1
2
Unhandled rejection Template render error: (unknown path) [Line 4, Column 148]
unexpected token: }}

很绝望,也没说明是哪个文件有问题,只是说在解析过程中发生了错误。可以确定的是肯定是和angular模板的插值表达式{{}}出现了冲突。

然后google这个问题,发现的确是这个括号有问题:

Every interaction is both Hexo uses Nunjucks to render posts (Swig was used in older version, which share a similar syntax). Content wrapped with {{ }} or {% %} will get parsed and may cause problems. You can wrap sensitive content with the raw tag plugin.precious and an opportunity to delight.

Hexo使用Nunjucks来渲染帖子(Swig在旧版本中使用,它们有相似的语法)。 使用{{}}或{%%}包装的内容将被解析,并可能导致问题。

Nunjucks是一套富功能的模板引擎。模板语言功能强大,支持块继承、自动转义、宏、异步控制等功能。

说是可以用hexo的raw标签来把有冲突的文本包起来让hexo对大括号不做解析:

1
2
3
{% raw %}
content
{% endraw %}

所以我很粗暴的把整个文章都用raw标签包起来了,发现大括号是不解析了,代码高亮也没了,连换行也没了,灾难啊。

看来还需要精确到哪个语句发生了问题。

我排查了多个博客发现,多行代码中的大括号是没问题的,只有在单行注释中的大括号才会报错。

这好办了,只要将单行代码中的大括号包含在raw标签中就可以了。

1
插值表达式`{% raw %}{{}}{% endraw %}`出现了冲突

然后替换所有文件中的单行代码中的大括号为上面这个样子,就ok了。

码字辛苦,打赏个咖啡☕️可好?💘