因此,我正在使用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_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库在下面。启动烧瓶,然后进入浏览器到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)