package main import ( "fmt" "html/template" "os" "path/filepath" ) func main() { // 模拟渲染器的数据结构 tableName := "categories" // 模拟模板数据 templateData := map[string]interface{}{ "Table": tableName, "TableAlias": "分类", "Columns": []interface{}{map[string]interface{}{"Name": "id", "Alias": "ID", "ShowInList": true}}, "Data": []interface{}{map[string]interface{}{"id": 1, "name": "测试"}}, "Total": 1, "Page": 1, "PerPage": 10, "Pages": 1, "Search": "", "SortField": "", "SortOrder": "asc", "Tables": []interface{}{map[string]interface{}{"Alias": "categories"}}, "CurrentPath": "/", "StartRecord": 1, "EndRecord": 1, "LastUpdate": "2025-08-07", } // 加载并测试模板 builtinPath, _ := filepath.Abs("./web/templates/builtin") // 基础模板函数 funcs := template.FuncMap{ "dict": func(values ...interface{}) map[string]interface{} { dict := make(map[string]interface{}) for i := 0; i < len(values); i += 2 { if i+1 < len(values) { key := fmt.Sprintf("%v", values[i]) dict[key] = values[i+1] } } return dict }, "add": func(a, b int) int { return a + b }, "sub": func(a, b int) int { return a - b }, "json": func(v interface{}) string { return fmt.Sprintf("%v", v) }, } // 加载布局模板 layoutPath := filepath.Join(builtinPath, "layout.html") listPath := filepath.Join(builtinPath, "list.html") // 解析模板 tmpl := template.New("test").Funcs(funcs) // 读取并解析布局 layoutContent, err := os.ReadFile(layoutPath) if err != nil { fmt.Printf("Error reading layout: %v\n", err) return } // 读取并解析列表模板 listContent, err := os.ReadFile(listPath) if err != nil { fmt.Printf("Error reading list: %v\n", err) return } // 解析模板内容 tmpl, err = tmpl.Parse(string(layoutContent)) if err != nil { fmt.Printf("Error parsing layout: %v\n", err) return } tmpl, err = tmpl.Parse(string(listContent)) if err != nil { fmt.Printf("Error parsing list: %v\n", err) return } // 测试渲染 fmt.Println("Testing template render...") err = tmpl.ExecuteTemplate(os.Stdout, "layout", templateData) if err != nil { fmt.Printf("Error executing template: %v\n", err) return } fmt.Println("\nTemplate render test completed successfully!") }