【发布时间】:2021-07-02 17:11:49
【问题描述】:
我正在尝试使用 KTOR DSL 将 HTML 模板相互嵌套,看起来应该非常简单,但文档让我无处可去,而且我尝试过的任何东西都没有编译或工作。
我定义了一个根级页面模板,它需要一个名为“pageContent”的占位符,我正在尝试使用路由来确定应该将哪个页面级模板作为 HTML 内容注入。所以 PageTemplate 看起来像这样:
class PageTemplate(private val username: String, private val displayName: String) : Template<HTML> {
val pageContent = Placeholder<FlowContent>()
override fun HTML.apply() {
head {
title { +"Page Title" }
stylelink("lots of style and script, etc")
}
body("body classes") {
header {...} //display logged-in user's name here, nav, etc
main("some classes") {
insert(pageContent)
}
}
}
}
我的路由看起来像这样:
get("/example-path") {
call.respondHtmlTemplate(PageTemplate(call.session?.username, call.session?.displayName)) {
pageContent {
ExamplePathTemplate(call.session?.username)
}
}
}
这个想法是让每个路由都用自己的路径特定模板覆盖 pageContent。
上面的代码编译。但是,当我运行它时,实际上从未调用过 ExamplePathTemplate。我也尝试过在insert(ExamplePathTemplate(...), pageContent) 上使用变体,但由于某种类型不匹配而无法编译。感觉这应该是我应该能够使用 KTOR 完成的一件显而易见的事情——有人知道我可能会错过什么吗?
【问题讨论】:
-
显示您的
PageTemplate课程 -
由于 API 笨拙,这一点并不明显。
-
@МихаилНафталь 我已经用 PageTemplate 类的示例更新了这个问题