#go #go-html-template
#Вперед #перейти к html-шаблону
Вопрос:
Я работаю над шаблоном, который поддерживается html/template
пакетом Go, и у меня есть конкретное строковое значение, которое передается в шаблон, которое необходимо отменить. Единственное ограничение заключается в том, что я не могу отобразить весь шаблон через text/template
, он должен быть отображен через html/template
.
У меня есть упрощенный пример проблемы здесь:
package main
import (
"log"
"os"
"html/template"
)
func main() {
templateStr := `<input type="text" data-thing="{{.dataThing}}"/>`
tmpl, err := template.New("").Parse(templateStr)
if err != nil {
log.Fatal(err)
return
}
tmpl.Execute(os.Stdout, map[string]string{"dataThing":"this->shouldNotEscape"})
}
Текущий результат шаблона таков: <input type="text" data-thing="this-amp;>shouldNotEscape"/>
.
Но желаемый результат шаблона таков: <input type="text" data-thing="this->shouldNotEscape"/>
.
Здесь у меня есть игровая площадка Go, которую можно запустить.
Комментарии:
1. golang.org/pkg/html/template/#hdr-Typed_Strings
2. @Adrian Я попытался обернуть строку с помощью
template.HTML
, но это по-прежнему не удается. Пример здесь: play.golang.org/p/EyIjCk-f_Hd3. Что означает «Все еще сбой»? Как вы его использовали, когда пробовали? В вашем коде не отображается использование
template.HTML
, что является решением описанной вами проблемы.4. @Adrian смотрите мой отредактированный предыдущий комментарий. Я обернул требуемую неэкранированную строку с помощью
template.HTML
вызова, но при рендеринге строка все еще экранируется внутри значения атрибута.