2017-09-07 12 views
0

私はHTMLファイルのJavaScriptをページに表示するために文字列を送る小さなPythonスクリプトを用意しています。ただし、スクリプトはPythonファイルから送信されたデータを受信して​​いません。私のコードは以下の通りです:テンプレートを使用してJavascriptにデータを送信できません。ボトル

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() 

私はこのようにしてページをしたいと思います:

Hello 

HI, how are you 

残念ながら、表示されているのは:

Hello 

誰でもこの問題を解決する方法を知っていますか?

答えて

1

ここでの問題は、テンプレートが有効なjavascriptをレンダリングしていないことです。

>>> 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> 

ロードがブラウザでこのHTMLは(Firefoxの52.3.0でテスト)構文エラーが発生します。

SyntaxError: missing ; before statement

問題はsの定義が<script>タグ内に引用されていないということです。固定バージョン:

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

は、ブラウザで期待どおりに動作します。このマークアップにレンダリング:

>>> 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

はどうもありがとうございました!それは完全に動作します! – Ajax1234

関連する問題