Как удалить html (в строке) в шаблонах Koreander? - PullRequest
0 голосов
/ 23 апреля 2020

Я использую библиотеку lukasjapan / koreander вместе с версией, поддерживающей ktor, и когда я вызываю переменную topbar ViewModel (Res class) из файла kor, она экранируется от html String.

Вот как я вызываю ktor для обслуживания веб-страниц:

suspend fun main() = coroutineScope<Unit> {
    System.setProperty(SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "TRACE")
    embeddedServer(
        Netty,
        port = 80,
        module = Application::module
    ).apply { start(wait = true) }
}

data class Res(val topbar: String)

fun Application.module() {
    install(KoreanderFeature)
    routing {
        get("/") {
            val text = javaClass.getResource("/templates/topbar.kor").readText()
            val resource = Res(Koreander().render(text, Any()))
            call.respondKorRes("/templates/index.kor", resource)
        }
    }
}

Это мой файл topbar.kor: Это просто для тестирования, поэтому я делаю его просто маленьким.

.navbar-custom
    %ul.list-unstyled.topnav-menu.float-right.mb-0
        %li.d-none.d-sm-block
            %form.app-search

Это мой файл index.kor:

%html
    %head
    %body
        %p.hello Hello World!
        $topbar / <- problem here, this has escaped html, browser interpret it as text

Это то, что отображается на браузер: Browser-snapshot Как мне удалить html здесь, чтобы браузер интерпретировал его как действительный html и отобразил его там?

1 Ответ

0 голосов
/ 25 апреля 2020

Я получил ответ от Дэвида Эрикссона @ official kotlinlang-slack

Мы можем использовать фильтр :unsafehtml для эффективного обхода HTML экранирования:

%html
    %head
    %body
        %p.hello Hello World!
        :unsafehtml $topbar
...