我试图将部分html注入GTPL文件,但似乎总是"逃脱"html内容.如何将HTML代码段发送到标记并直接呈现?
"hello.gtpl"的内容
yieldUnescaped '<!DOCTYPE html>'
html {
yieldUnescaped text
}
Run Code Online (Sandbox Code Playgroud)
来自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 )
}
Run Code Online (Sandbox Code Playgroud)
localhost:5050/helloplain 提供适当的HTML,以 localhost:5050/hellotemplate提供已转义所有HTML内容的文件.
<!DOCTYPE html><html><title> Hello </title><body> <h3> Hello </h3> </body> </html>
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
您需要配置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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
模板/ hello.gtpl
yieldUnescaped '<!DOCTYPE html>'
html {
yieldUnescaped text
}
Run Code Online (Sandbox Code Playgroud)
卷曲运行app的输出
$ curl localhost:5050
<!DOCTYPE html><html><title>Hello</title><body><h3>Hello</h3></body></html>
Run Code Online (Sandbox Code Playgroud)
有关可用于配置的属性的列表,您可以查看GDK http://docs.groovy-lang.org/latest/html/gapi/groovy/text/markup/TemplateConfiguration.html
| 归档时间: |
|
| 查看次数: |
286 次 |
| 最近记录: |