html / шаблон: отменить удаление определенного значения данных в шаблоне

#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_Hd

3. Что означает «Все еще сбой»? Как вы его использовали, когда пробовали? В вашем коде не отображается использование template.HTML , что является решением описанной вами проблемы.

4. @Adrian смотрите мой отредактированный предыдущий комментарий. Я обернул требуемую неэкранированную строку с помощью template.HTML вызова, но при рендеринге строка все еще экранируется внутри значения атрибута.