2017-02-15 1 views
0

python flask So entwickle ich eine Webanwendung, die den Benutzer nach Daten fragt, analysiert die Daten im Back-End mit BLAST und R, und gibt interaktive HTML-Plots, die werden an einem lokalen Ort gespeichert (Vorlagen) und dem Benutzer angezeigt.Kann nicht in interaktiven HTML-Outputs von R produzieren plotly Paket

Alles bis R Ausgänge läuft reibungslos. Ich habe die HTML-Dateien geöffnet und bestätigt, dass die R-Codes wie erwartet ausgeführt wurden und die erstellten Grafiken interaktiv sind. Wenn ich diese HTML-Dateien über flask rendere, gibt der Browser eine schwarze Seite zurück. Die Verwendung von send_file war auch fruchtlos, um die Plots anzuzeigen. Ich habe bestätigt, dass der Pfad zu den Java-Skripten für das interaktive Diagramm im selben Ordner liegt.

Geht man durch die Entwickler-Tool Konsole liest den folgenden Fehler:

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 < 

Kann jemand bitte beraten, wie erfolgreich die interaktive R HTML-Ausgaben in flask zu zeigen zu bekommen?

+0

Können Sie einige weitere Informationen hinzufügen? Wie rendert man HTML in einer Flasche? Verwenden Sie eine Vorlagen-Engine? Ohne weitere Informationen ist es meist wild zu erraten, was schief gelaufen ist. –

+0

Hallo Maximilian, normalerweise wirst du ein HTML in flask mit zB @ app.route ('/ software /') zurückgeben def software(): \t zurückgeben render_template ('software.html') Dies gibt ein leeres Weiß zurück Bildschirm auf dem Browser mit den produzierten htmls –

Antwort

0

Wenn Sie send_file oder send_from_directory verwenden, müssten Sie auch die JavaScript-Bibliotheken bereitstellen, die für das Diagramm benötigt werden. Dies könnte der Grund für die leere Seite sein.

Das gleiche gilt für render_template aber nach den Fehlermeldungen es scheint eher wie, dass Ihre JS-Bibliotheken wurden auch als Vorlagen gemacht und einige < oder > Charakter wurde hinzugefügt oder entfernt.

Probieren Sie das folgende Snippet, das für mich funktioniert und vielleicht einen guten Start gibt.


Ein sehr einfaches R Skript eine eigenständige HTML-Datei mit einem Plotly Plot zu erstellen. Eine Datei mit dem Namen test.html wird im Verzeichnis /tmp erstellt. Alle JavaScript-Bibliotheken und CSS-Dateien befinden sich in /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) 

Ein minimaler Schnipsel Flask-Server ist unter den Plot und die JavaScript-Bibliotheken zu dienen. Startkolben und gehen in den Browser auf http://localhost:5000/ würde die Handlung zeigen und alle Bibliotheken zur Verfügung stellen.

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) 
+0

Danke Maximilian, ich denke, das ist genau das, was ich brauche, um mein Problem zu lösen. Aus Ihrem Code ist jedoch nicht ersichtlich, wie der Ordner test.html und der Ordner test_files wie vorgeschlagen mit beiden Routen verknüpft sind. welche route muss ich in meinem browser aufrufen, damit die test.html richtig angezeigt wird? @ app.route ('/') def plotly(): zurück send_from_directory ('/ tmp /', 'test.html') gibt die ursprüngliche Ausgabe zurück –

+0

Awesome !!! es hat Max geklappt. Vielen dank für Deine Hilfe. Also habe ich den test_files-Pass auf die zweite Route zu @ app.route ('/ ') geändert und es hat wunderbar funktioniert. Danke noch einmal –