置頂 0%

Hexo出現 Template render error

前言

上次寫完上一篇文章筆記後,執行hexo g生成靜態文件後,就出現下面的錯誤了!導致後續的部屬根本進行不下去,google搜尋的問題大都是提到某個模板(swig)出現的字串符號跟 Hexo 產生衝突,把我之前修改的.swig檔案全部Run過一遍,結果看到眼睛爛掉也沒找出什麼,最後沒辦法只好重新佈署一個新的Next資料夾,在一個個檔案試哪邊錯,結果找到是主題目錄下的_config註解錯地方了…其實會導致Hexo編譯時出現 Template render error的原因有幾種,這篇就來記錄一下吧!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
ERROR Template render error: (C:\Users\kevin\Documents\hexo\blog\themes\next\layout\page.swig)
Template render error: (C:\Users\kevin\Documents\hexo\blog\themes\next\layout\page.swig)
Template render error: (C:\Users\kevin\Documents\hexo\blog\themes\next\layout\page.swig) [Line 8, Column 12]
Template render error: (C:\Users\kevin\Documents\hexo\blog\themes\next\layout\page.swig)
Template render error: (C:\Users\kevin\Documents\hexo\blog\themes\next\layout\_partials\head\head-unique.swig) [Line 10, Column 23]
Template render error: (C:\Users\kevin\Documents\hexo\blog\themes\next\layout\page.swig) [Line 3, Column 3]
Template render error: (C:\Users\kevin\Documents\hexo\blog\themes\next\layout\page.swig)
Template render error: (C:\Users\kevin\Documents\hexo\blog\themes\next\layout\_partials\header\index.swig) [Line 2, Column 10]
Template render error: (C:\Users\kevin\Documents\hexo\blog\themes\next\layout\_partials\header\menu.swig) [Line 20, Column 28]
Template render error: (C:\Users\kevin\Documents\hexo\blog\themes\next\layout\_partials\header\menu.swig) [Line 2, Column 31]
Error: Unable to call `value["split"]`, which is undefined or falsey
.....
```

## 產生 ERROR Template render error 原因

當執行hexo g後出現 ERROR Template render error,大致上可能是下面三個原因,都會讓Hexo在編譯時候爛掉

* **.md 或 .swig檔案中出現兩個左括號`{` `{` 或 兩個右括號 `}` `}`**
Hexo 本身的語法具有這兩種括號的語意,所以只要出現兩個左括號或兩個右括號就都會導致Hexo無法編譯

* **swig模板引擎中include到某個不存在的swig**
如下範例直接在某個.swig模板引擎中include了`recommended_posts.swig`,但如果目錄中根本不存在此檔案,這時也會出現Template渲染的錯誤,而且cmd上面的錯誤訊息很難看出缺少哪一個檔案
```html
{% include 'recommended_posts.swig' with {post: post, site: site} %}
1
2
3
4
5
6
7
{% if theme.recommended_posts.enabled and not is_index %}
{% include 'recommended_posts.swig' with {post: post, site: site} %}
{% endif %}
```

* **_config.yml中配置目錄項目位址的值放空**
這邊就是我碰到的`Template render error`罪魁禍首,當初在主題目錄下的`_config.ynl`註解掉menu的about選單項目,如下所示在值的前面加上#直接將其註解掉,如下面所示

menu:
home: / || fa fa-home
about: #/aboutKevin/ || fa fa-user

1
但這樣子沒有整行註解掉的話,還是會讓某一個swig執行about頁面,但因為是項目空值就會出現Template渲染的錯誤,正確的註解應該是要如下

menu:
home: / || fa fa-home
#about: /aboutKevin/ || fa fa-user


## 參考
1. https://www.fvolcano.red/2020/hexo-githubPages-setUp-record.html
2. https://wxnacy.com/2018/01/12/hexo-specific-symbol/