亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據主模板實際需要動態解析子模板

根據主模板實際需要動態解析子模板

Go
滄海一幻覺 2022-12-19 10:35:44
假設我有大量的模板和子模板,那么我如何根據管道中需要的那些來解析子模板呢?template我的想法是讀取當前要渲染的模板并找出它使用了哪些模板,但我不知道該怎么做,也許用正則表達式?PS:答案不必考慮子模板的多層嵌套。例子package mainimport (    "html/template"    "path/filepath")func CollectFiles(dir string, excludeList []string) (fileList []string, err error) {    // ...    return}func main() {    filePathList, _ := CollectFiles("dir/src", []string{".md"})    for _, curFile := range filePathList {        _, _ = template.New(filepath.Base(curFile)).            ParseFiles(curFile, "tmplA", "tmplB", "...", "tmplN")    }}假設主模板只需要 tmplA和tmplB作為子模板。我怎樣才能檢測到它只需要這兩個?我不想每次添加或調整新模板時都更改程序。
查看完整描述

1 回答

?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

您可以通過這種方式找到模板中的所有關鍵字。

regexp.MustCompile(`{{-? ?(template|partial) \"([^() ]*)\" ?.* ?-?}}`)

正則表達式101

當您遇到更復雜的情況時,哪里partial只是您使用的示例。您可以刪除它或自行添加更多關鍵字。

go-playground


其他部分,比如CollectFiles我認為不是那么重要,如果有人需要參考下面


然后只需要過濾模板,找出當前文件使用的模板。


最后,無論何時添加模板,代碼都不會更新。(除非您想更新站點上下文)


我在Github上寫了一個可以運行的簡單例子,這樣人們就可以知道我想做什么。

子模板的嵌套。

如果你想處理這個。嘗試使用這個功能

現在這將起作用

如果渲染:index.gohtml不僅base.gohtml包含而且還包含 { head.gohtmlnavbar.gohtmlfooter.gohtml}

<!-- index.gohtml --> 

{{- template "base.gohtml" . -}} <!-- ?? --> 

{{define "head"}}

  <style>h2 {background-color: yellow;}

  </style>

{{end}}

{{define "body"}}

<h2>Welcome to XXX</h2>

{{end}}

在哪里base.gohtml


{{template "head.gohtml" . -}}

{{template "navbar.gohtml"}}

{{- block "body" . -}}

{{- end -}}

{{template "footer.gohtml"}}


查看完整回答
反對 回復 2022-12-19
  • 1 回答
  • 0 關注
  • 81 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號