所以我使用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 <
有人可以建议如何成功地将交互式R HTML输出显示在flask
中吗?
答案 0 :(得分:0)
当您使用send_file
或send_from_directory
时,您还需要提供绘图所需的JavaScript库,这可能是空白页面的原因。
对于render_template
也是如此,但根据错误消息,似乎更像是你的JS库也被渲染为模板,并且添加或删除了一些<
或>
字符
请尝试以下适用于我的代码段,也许会为您提供一个良好的开端。
一个非常简单的R脚本,用于创建带有Plotly
图的独立HTML文件。在test.html
目录中创建名为/tmp
的文件。所有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服务器代码段。启动烧瓶并进入浏览器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)