2017-09-07 8 views
0

J'ai un petit script Python qui est censé envoyer une chaîne au javascript dans mon fichier HTML pour être rendu sur la page. Cependant, le script ne reçoit pas les données envoyées à partir du fichier Python. Mon code est ci-dessous:Impossible d'envoyer des données à Javascript via des modèles Bouteille

Simple.html:

<html> 
<body> 
    <h1>Hello</h1> 
    <p1 id="demo"></p1> 
    <script> 
    var s = {{to_display}}; 
    var x = document.getElementById("demo"); 
    x.innerHTML = s; 
    </script> 
</body> 
</html> 

main.py:

from bottle import Bottle, template 

app = Bottle() 

@app.route('/') 
def index(): 
    data = {"to_display":"HI, how are you"} 
    return template("simple.html", data) 

if __name__ == '__main__': 
    app.run() 

Je voudrais la page pour ressembler à ceci:

Hello 

HI, how are you 

Malheureusement, il affiche uniquement:

Hello 

Est-ce que quelqu'un sait comment corriger ce problème?

Répondre

1

Le problème ici est que le modèle ne rend pas le javascript valide.

>>> from bottle import template 
>>> data = {'to_display': 'HI, how are you'} 
>>> rendered = template('/home/kev/tmp/test.html', data) 
>>> print rendered 
<html> 
    <body> 
    <p1 id="demo"></p1> 
    <script> 
     var s = HI, how are you; 
     var x = document.getElementById("demo"); 
     x.innerHTML = s; 
    </script> 
    </body> 
</html> 

Chargement ce code HTML dans le navigateur déclenche une erreur de syntaxe (testé sur Firefox 52.3.0):

SyntaxError: missing ; before statement

Le problème est que la définition de s n'est pas cité dans la balise <script> . Version fixe:

<html> 
    <body> 
    <p1 id="demo"></p1> 
    <script> 
     var s = "{{ to_display }}"; 
     var x = document.getElementById("demo"); 
     x.innerHTML = s; 
    </script> 
    </body> 
</html> 

Renders à ce balisage, qui fonctionne comme prévu dans le navigateur:

>>> print rendered 
<html> 
    <body> 
    <p1 id="demo"></p1> 
    <script> 
     var s = "HI, how are you"; 
     var x = document.getElementById("demo"); 
     x.innerHTML = s; 
    </script> 
    </body> 
</html> 
+0

Merci beaucoup! Cela fonctionne parfaitement! – Ajax1234