我知道管道工比完全成熟的网站更适合构建API,这说我试图在HTML中显示来自db(mongo)的动态数据。一切正常,但我使用的方式(很大程度上来自一个巨大的例子)可能不是最好的。以下是我的主页示例:
#' Return result
#' @get /
#' @serializer html
function(ht) {
title <- "Title"
body_intro <- "Welcome to R.gift!"
body_model <- paste("This is just a test ...page from the db with name <b>", single[1], "</b>")
body_msg <- paste("the home page title is <b>", single[2] , "</b>",
"The home page content:<b>",
single[3], "</b>",
sep = "\n")
css <- ' <link href="https://cloud.typography.com/7/css/fonts.css" rel="stylesheet">'
about <- '<a href="pages/about">about page</a>'
contact <- '<a href="pages/contact">contact page</a>'
result <- paste(
"<head>",
css,
"</head>",
"<html>",
'<div style="font-family: Giant Background A, Giant Background B;font-style: normal;font-weight: 400;font-size:20pt;">',
"<h1>", title, "</h1>",
"<body>",
body_intro, "</div>",
'<div style="font-family: Gotham A, Gotham B;font-style: normal;font-weight: 400;font-size:16pt;">',
"<p>", body_model, "</p>",
"<p>", body_msg, "</p>",
"<p>", about, "</p>",
"<p>", contact, "</p>",
"</div>",
"</body>",
"</html>",
collapse = "\n"
)
return(result)
}
所以我的问题是,是否有一种更优雅的方式来实现相同的可能与半模板系统。解决方案可能很明显(我对R来说很新,所以请耐心等待)。我知道管道工可以使用
服务静态文件#* @assets ./files/static
list()
但我认为这不允许我将变量传递给index.html吗?
理想情况是只使用任何模板系统中的标签。 提前谢谢!
答案 0 :(得分:1)
我的建议是取消服务器端渲染并在客户端完成所有工作。您可以使用像 vue 这样的前端库(如果您了解 HTML 和基本的 javascript,则可以使用 vue),然后向后端发出 GET 请求以获取您需要的数据。然后使用该数据自定义 UI。这种方法让 R 专注于数据,而前端专注于呈现。
答案 1 :(得分:0)
您可以尝试这样的事情:
basicHTML <- "The home page title is <b> %s </b> The home page content: <b> %s </b>" # create a template in a file or in the script.
single <- c(title = "Hello World", bodyMsg = "lorem ipsum") # set up your parameters.
finalHTML <- sprintf(basicHTML, single[1], single[2])
或许你对这种方法感到更舒服:https://shiny.rstudio.com/articles/templates.html
我希望这会对你有所帮助。