我最近換出了數據存儲區,並且作爲副作用必須將結構字段從template.HTML
更改爲string
以與編組器/ DB驅動程序兼容。該字段RenderedDesc
包含通過russross/blackfriday傳遞的呈現的HTML。將template.HTML直接渲染到模板中
以前我只能將整個結構按「原樣」傳遞給模板,並在模板中調用{{ .RenderedDesc }}
。
因爲它現在是一個字符串,我添加了一個過濾器將其轉換回模板呈現:
templates.go
func RenderUnsafe(s string) template.HTML {
return template.HTML(s)
}
template.FuncMap{
...
"unsafe": RenderUnsafe,
}
_content.tmpl
...
<div class="detail">
{{ .RenderedDesc | unsafe }}
</div>
...
有沒有更好的方式來實現這一點,而不必在模板級使用過濾器?從我的數據庫驅動程序(不在卡上)重新編寫編組邏輯,看起來這是「存儲」字符串但呈現原始HTML的最簡單方法。
因爲template.HTML的目的是包裝已知安全標記,所以您的不安全過濾器應該被稱爲「安全」。在你的情況下,除非你需要在不同的領域做很多事情,否則我只需在結構體中定義一個方法,將你的字段作爲template.HTML值返回。 – krait
@krait良好的捕獲;我原本稱之爲「安全」,但不清楚如何解釋這一點。 RE:在結構上定義一個方法:爲了在模板中使用結果字段,我還必須將它傳遞給我的模板,類似'M {renderedField:value}',並將{{.RenderedDesc }}'帶有新字段/ break {{with .Listing}}分成兩部分。 – elithrar