Как отключить автоэкранирование в IRIS
Я вставляю теги HTML в таблицу базы данных:
<table>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
</table>
И отправлять полученные данные в View
func MyEvent(ctx iris.Context){
rows := ...
ctx.ViewData("rows", rows[0])
ctx.View("template.html")
}
Как я могу отключить авто-экранирование только в этом случае?
1 ответ
То, как вы получите необработанный HTML-код через шаблон и в вывод, будет зависеть от того, какой механизм шаблонов вы используете с Iris. Iris поддерживает пять встроенных шаблонизаторов:
- Стандартный html, его синтаксический анализатор шаблонов - https://golang.org/pkg/html/template/
- Django, его синтаксический анализатор шаблонов - https://github.com/flosch/pongo2
- Pug (Jade), его синтаксический анализатор шаблонов - https://github.com/Joker/jade
- Рули, его синтаксический анализатор шаблонов - https://github.com/aymerick/raymond
- Amber, его синтаксический анализатор шаблонов - https://github.com/eknkc/amber
Если вы используете стандарт html/template
пакет, то вы бы пометили строку как "безопасный HTML", используя template.HTML
тип:
ctx.ViewData("rows", template.HTML(rows[0]))
или добавьте свой собственный фильтр, который просто делает return template.HTML(s)
и использовать это внутри шаблона.
Если бы вы использовали руль, то вы бы использовали {{{...}}}
в шаблоне или raymond.SafeString
в помощнике:
{{{yourHTML}}}
Если вы используете один из других шаблонизаторов, вы бы использовали любой механизм, который они предлагают для получения необработанного HTML через шаблон.
Все это предполагает, конечно, что вы очищаете и дезинфицируете HTML-код до того, как он попадет в базу данных или до того, как он попадет из базы данных в шаблон.