无法在 R plotly 包生成的 Flask 交互式 html 输出中呈现
Unable to render in flask interactive html outputs produced by R plotly package
所以我正在使用 python flask
开发一个 Web 应用程序,该应用程序要求用户提供数据,使用 BLAST 和 R 在后端分析数据,并输出存储在中的交互式 HTML 图本地位置(模板)并显示给用户。
直到 R 输出的一切都运行顺利。我已经打开 HTML 文件并按预期确认 R 代码 运行 并且生成的图形是交互式的。但是,当我通过 flask
呈现这些 HTML 时,浏览器 returns 成为黑页。使用 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 <
有人可以建议如何成功地让交互式 R HTML 输出显示在 flask
中吗?
当您使用 send_file
或 send_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 库的最小 Flask 服务器片段如下。启动 Flask 并在浏览器中转到 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)
所以我正在使用 python flask
开发一个 Web 应用程序,该应用程序要求用户提供数据,使用 BLAST 和 R 在后端分析数据,并输出存储在中的交互式 HTML 图本地位置(模板)并显示给用户。
直到 R 输出的一切都运行顺利。我已经打开 HTML 文件并按预期确认 R 代码 运行 并且生成的图形是交互式的。但是,当我通过 flask
呈现这些 HTML 时,浏览器 returns 成为黑页。使用 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 <
有人可以建议如何成功地让交互式 R HTML 输出显示在 flask
中吗?
当您使用 send_file
或 send_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 库的最小 Flask 服务器片段如下。启动 Flask 并在浏览器中转到 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)