2017-05-16 6 views
0

Ich benutze Flask um eine UI für einen einzelnen Benutzer zu hosten. Ich habe versucht, eine Möglichkeit zu finden, wie der Benutzer auf eine Schaltfläche klicken kann, die Text und Bilder an einer vorgegebenen Stelle in einem Dokument mithilfe einer Auszeichnungssprache einfügt. Ich habe ursprünglich Jinja2 dafür verwendet, aber das Problem ist, dass der Benutzer in der Lage sein muss, das Dokument zu ändern, nachdem die Daten eingefügt wurden, falls sie kleine Änderungen am Text vornehmen oder eine Zeile hinzufügen müssen. t machen Sie mit einer Flasche gerenderten Schablone.Rendern eines Jupyter Notebook Iframe in Flask

Ich verstehe, dass es möglich ist, ein Jupyter Notebook (das auf Auszeichnungssprache basiert) mit einem iframe in die Benutzeroberfläche zu bringen, aber ich hatte keinen Erfolg dabei.

Was ich versucht habe:

  1. meinen Jupyter Notebook konfiguriert
  2. Retour Iframe mit meiner öffentlichen Jupyter Adresse <iframe width="400" height="400" src="http://10.33.75.112:8888/notebooks/Desktop/Tool/test.ipynb"/> in meine HTML-Template-Datei öffentlich zu sein ..., die eine bringt leeres Iframe, das ich nicht mit
  3. interagieren kann Verwirrt mit NBviewer und NBconvert, um zu sehen, ob es einen Weg gab, den ich integrieren konnte, aber keinen Erfolg gehabt habe.

Ideen?

Antwort

0

Ich fand eine Lösung.

Im Ordner Jupyter-notebook-config.py gibt es einige Optionen, die Sie auskommentieren und ändern müssen, um dies zu erreichen.

c.NotebookApp.allow_origin = '*' #Basic permission 
c.NotebookApp.disable_check_xsrf = True #Otherwise Jupyter restricts you modifying the Iframed Notebook 
c.NotebookApp.ip = 'ENTER_YOUR_JUPYTER_IP_ADDRESS' #Appears in the top browser bar when you launch jupyter 
c.NotebookApp.port = 8888 #Your choice of port 
c.NotebookApp.token = '' #In my case I didn't want to deal with security 
c.NotebookApp.trust_xheaders = True #May or may not make a difference to you 

c.NotebookApp.tornado_settings = { 
'headers': { 
'Content-Security-Policy': "frame-ancestors 'http://127.0.0.1:5000/' 'self' " 
} 
} #assuming your Flask localhost is 127.0.0.1:5000 

Dann im HTML:

<iframe width="1000" height="1000" src="http://ENTER_YOUR_JUPYTER_IP_ADDRESS:8888/notebooks/Desktop/test.ipynb"/> 

Edit: Auch Google Chrome einen Fehler hat iframes wie diese so verwenden entweder Mozilla oder IE angezeigt wird.