在闪亮的HTML模板中循环

时间:2018-06-16 03:57:34

标签: r shiny html-templates

Shiny拥有带{{ }}语法的html模板来嵌入r代码:

<ul>
    <li>{{ SHINY_VARIABLE }}</li>
    <li>{{ SHINY_VARIABLE2 }}</li>
</ul>

然而,其他Web框架可以与html结合使用服务器变量。来自Django文档的基本示例:

<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% endfor %}
</ul>

这在.html文件中的标记非常易读。 shiny可以这样做:

library(shiny)

athlete_list <- c('Lebron', 'Serena', 'Michael')

li_vec <- paste0('<li>', athlete_list, '</li>')
li_text <- paste(li_vec, collapse = '')
ul_text <- paste0('<ul>', li_text, '</ul>')

HTML(ul_text)

Yuck ......当你嵌套其他元素时会变得更加丑陋。谁有更好的方法?

1 个答案:

答案 0 :(得分:0)

这更接近,仍然不是很好......

# Function to process looped over html + variable
rHtml <- function(html) {
  html <- paste(html, collapse = '')
  HTML(html)
}

# Server variable
athlete_list <- c('Lebron', 'Serena', 'Michael')

在您的html模板中:

<ul>
  {{
  rHtml(sapply(athlete_list, function(x) {paste(
    '<li>', x, '</li>\n'
  )}))
  }}
</ul>