31
votes

I created a table containing some HTML links using Shiny's renderDataTable. The links are not clickable, though, instead they render literally:

https://samizdat.shinyapps.io/zakazky/

Do you have any idea what could be wrong? It worked fine before upgrading Shiny to the version 0.11... Thanks!

1
include your tried codeHaveNoDisplayName
As I read the code that gets pushed to my browser this line is doing the display of the area that I think you are having difficulty with, which suggests to me that we really do need to know what is in that underlying table: ` <div id="filtrovanaTabulka" class="shiny-datatable-output"></div>`IRTFM
Thanks, I have found the solution. The renderDataTable function in Shiny has an argument escape. It was most likey set to TRUE by default in the new version. When I change it, it works again. More info: shiny.rstudio.com/reference/shiny/latest/renderDataTable.htmlPetr Kočí
You should put 'setting the escape argument to FALSE' as an answer. This was quite helpful - thanks!jpd527

1 Answers

46
votes

I had the same problem. The escape = FALSE option for renderDataTable solved it, as you mentioned in the comments.

Here is complete code for an app with a table that has links.

If you are doing this, you will want each link to be unique based on a value in the table. I move this code into a function so its cleaner.

#app.R#

library(shiny)

createLink <- function(val) {
  sprintf('<a href="https://www.google.com/#q=%s" target="_blank" class="btn btn-primary">Info</a>',val)
}

ui <- fluidPage(  
  titlePanel("Table with Links!"),
  sidebarLayout(
    sidebarPanel(
      h4("Click the link in the table to see
         a google search for the car.")
    ),
    mainPanel(
      dataTableOutput('table1')
    )
  )
)

server <- function(input, output) {

  output$table1 <- renderDataTable({

    my_table <- cbind(rownames(mtcars), mtcars)
    colnames(my_table)[1] <- 'car'
    my_table$link <- createLink(my_table$car)
    return(my_table)

  }, escape = FALSE)
}

shinyApp(ui, server)