无法在R Plotly软件包产生的烧瓶交互式HTML输出中渲染



因此,我正在使用python flask开发一个Web应用程序,该应用程序询问用户数据,使用BLAST和R分析后端中的数据,然后输出存储在本地中的交互式HTML图位置(模板)并向用户显示。

最新的R输出的所有内容都可以平稳运行。我已经打开了HTML文件,并确认了R码按预期运行,并且所产生的图形是交互式的。但是,当我通过flask渲染这些HTML时,浏览器会返回黑色页面。使用send_file也毫无结果显示图。我已经确认交互式图的Java脚本的路径位于同一文件夹中。

通过开发人员工具控制台读取以下错误:

htmlwidgets.js:1 Uncaught SyntaxError: Unexpected token <
jquery.min.js:1 Uncaught SyntaxError: Unexpected token <
datatables.js:1 Uncaught SyntaxError: Unexpected token <
jquery.dataTables.min.js:1 Uncaught SyntaxError: Unexpected token <

有人可以建议如何成功获取与flask中显示的交互式R HTML输出?

当您使用send_filesend_from_directory时,您还需要服务绘图所需的JavaScript库,这可能是空白页的原因。

对于render_template也是如此,但是根据错误消息,您的JS库也被渲染为模板,并且添加或删除了一些<>字符。

尝试以下片段,对我有用,也许可以为您提供一个良好的开端。


一个非常简单的R脚本,可以使用Plotly图创建独立的HTML文件。在/tmp目录中创建了一个称为test.html的文件。所有JavaScript库和CSS文件都在/tmp/test_files中。

library(plotly)
library(htmlwidgets)
myData <- data.frame(x=c(1,2,3), y=c(3,2,1))
local_path <- '/tmp/'
ply <- plot_ly(myData, x = ~x, y = ~y, type='scatter', mode='markers+line')
saveWidget(widget=ply, file=paste(local_path, "test.html", sep=""), selfcontained = FALSE)

最小的烧瓶服务器片段可供绘图,JavaScript库在下面。启动烧瓶,然后进入浏览器到http://localhost:5000/将显示该图并提供所有需要的库。

from flask import Flask
from flask import send_from_directory
app = Flask(__name__)
@app.route('/')
def plotly():
    return send_from_directory('/tmp/', 'test.html')
@app.route('/test_files/<path:path>')
def send_js(path):
    return send_from_directory('/tmp/test_files', path)

最新更新