Documentation
¶
Index ¶
- Variables
- func GetData(ctx context.Context) map[string]any
- func Middleware(engine Engine, globals ...map[string]any) func(next http.Handler) http.Handler
- func Render(ctx context.Context, writer io.Writer, name string, data map[string]any) error
- func WithData(ctx context.Context, dataMap map[string]any) context.Context
- func WithDatum(ctx context.Context, key string, value any) context.Context
- func WithEngine(ctx context.Context, engine Engine) context.Context
- type Engine
Constants ¶
This section is empty.
Variables ¶
Functions ¶
func GetData ¶
GetData 从 context 中获取所有模板数据 返回注入的全局模板数据的拷贝,如果没有则返回空 map
示例:
data := gohtml.GetData(r.Context())
data["Title"] = "Home Page" // 添加页面特定数据
result, _ := engine.Render("index", data)
func Middleware ¶
Middleware 返回一个 HTTP 中间件,将 Engine 注入到请求的 context 中 这样在请求处理器中就可以通过 FromContext 获取模板引擎来渲染模板
参数:
- engine: 模板引擎实例,会被注入到所有请求的 context 中
- globals: 可选的全局模板数据,会自动合并到所有模板渲染中 可用于注入通用数据如站点名称、用户信息等
用法:
// 基础用法
mux.Use(gohtml.Middleware(engine))
// 带全局数据
mux.Use(gohtml.Middleware(engine, map[string]any{
"siteName": "My Site",
"version": "1.0.0",
}))
// 在处理器中使用
func handler(w http.ResponseWriter, r *http.Request) {
engine, _ := gohtml.FromContext(r.Context())
engine.Render(w, r.Context(), "page.gohtml", map[string]any{
"title": "Home",
})
}
func Render ¶
Render 从 context 中获取引擎并渲染模板 此函数会自动合并 context 中的全局数据和传入的 data
参数:
- ctx: context.Context,必须包含通过 WithEngine 注入的引擎
- writer: io.Writer,渲染结果将写入此 writer
- name: 模板名称
- data: 页面特定的数据,会覆盖 context 中的同名键
示例:
err := gohtml.Render(r.Context(), w, "index", map[string]any{
"Title": "首页",
})
func WithData ¶
WithData 将多个模板数据存储到 context 中 用于在中间件中批量注入全局模板数据,这些数据会自动合并到所有模板渲染中
示例:
globals := map[string]any{
"SiteName": "My Website",
"Version": "1.0.0",
"Year": 2024,
}
ctx := gohtml.WithData(r.Context(), globals)
Types ¶
type Engine ¶
Engine 是模板引擎接口
func FromContext ¶
FromContext 从 context 中获取 Engine 如果 context 中没有 Engine,返回 nil 和 false
示例:
engine, ok := gohtml.FromContext(r.Context())
if !ok {
http.Error(w, "engine not found", http.StatusInternalServerError)
return
}
result, _ := engine.Render("index", data)
Click to show internal directories.
Click to hide internal directories.