我正在尝试将部分html注入GTPL file,但似乎总是"逃避" HTML内容。如何将HTML代码段发送到标记并直接呈现?
" hello.gtpl"
的内容yieldUnescaped '<!DOCTYPE html>'
html {
yieldUnescaped text
}
来自ratpack.groovy
get('helloplain') { //works .but clumsy
String htmlPayLoad = "<!DOCTYPE html> <html> <title> Hello </title><body> <h3> Hello </h3> </body> </html>"
context.getResponse().contentType(HttpHeaderConstants.HTML_UTF_8).send(htmlPayLoad.getBytes());
}
get('hellotemplate') { //ex: /users/
String text = "<title> Hello </title><body> <h3> Hello </h3> </body> "
render groovyMarkupTemplate( "hello.gtpl" ,text: text )
}
localhost:5050/helloplain
提供了一个正确的HTML,其中localhost:5050/hellotemplate
提供了一个已转义所有HTML内容的文件。
<!DOCTYPE html><html><title> Hello </title><body> <h3> Hello </h3> </body> </html>
我错过了什么?
答案 0 :(得分:6)
您需要配置MarkupTemplateEngine
才能禁用自动转义功能。
这是一个使用最新稳定版Ratpack的工作示例。
ratpack.groovy
@Grab('io.ratpack:ratpack-groovy:1.1.1')
import static ratpack.groovy.Groovy.ratpack
import static ratpack.groovy.Groovy.groovyMarkupTemplate
import ratpack.groovy.template.MarkupTemplateModule
ratpack {
bindings {
module(MarkupTemplateModule) { config ->
config.autoEscape = false
}
}
handlers {
get {
String text = '<title>Hello</title><body><h3>Hello</h3></body>'
render groovyMarkupTemplate('hello.gtpl', text: text)
}
}
}
模板/ hello.gtpl
yieldUnescaped '<!DOCTYPE html>'
html {
yieldUnescaped text
}
针对正在运行的应用
输出卷曲$ curl localhost:5050
<!DOCTYPE html><html><title>Hello</title><body><h3>Hello</h3></body></html>
有关可用于配置的属性的列表,您可以查看GDK http://docs.groovy-lang.org/latest/html/gapi/groovy/text/markup/TemplateConfiguration.html