![](/img/trans.png)
[英]Inline javascript in flask jinja2 templates not showing up in firefox/chrome debugger
[英]Javascript not rendering correctly in Flask jinja2 templates
我正在使用jinja2編寫Flask應用,並且試圖將我的Python變量都傳遞給某些Javascript和HTML。 我制作了Javascript和HTML模板,但是由於某種原因Java語言被渲染並顯示在錯誤的位置,因此我無法弄清楚問題出在哪里。
傳遞我的Python數據並呈現我的模板的控制器代碼是:
@info_page.route('/info.html', methods=['GET'])
def info():
''' Documentation here. '''
session = db.Session()
infoDict = {}
jsDict = {}
...
infoDict['character'] = character
infoDict['name']=name
jsDict['powertree']=powertree
js = render_template('powertree.js', **jsDict)
infoDict['js']=js
return render_template("info.html", **infoDict)
info.html
的模板為:
{% extends "layout.html" %}
{% block head %}
<link rel="stylesheet" type="text/css" href=" {{url_for('static',filename='css/index.css')}}">
{% endblock head %}
{% block code %}
{{js}}
{% endblock code %}
{% block body %}
<h1>{{name}}</h1>
...
{% endblock body %}
而且powertree.js
的模板是:
<script type='text/javascript'>
$(document).ready(function() {
var data = {{powertree}};
console.log('hello, inside powertree');
});
</script>
呈現的Javascript代碼僅顯示在我的網頁頂部。 查看DOM會發現它顯示在HTML主體內,而不是顯示在它所屬的HTML頭內。 如果刪除{{js}}
並將其替換為powertree.js
的實際代碼,則所有內容都會正常顯示,並且可以正常工作。 但是,我寧願將Javascript放在單獨的文件中,因為它會變得很長。 為什么不起作用? 我如何輕松地將變量傳遞到Javascript代碼中,以便在js中的本示例{{powertree}}
中進行引用? 因為它只是在頁面頂部明顯地顯示Javascript,所以讓我認為這是一個簡單的語法錯誤,缺少內容或類似內容,但是我什么也找不到。
謝謝。
另一個解決方案是使用Markup
類將js
變量標記為可以安全地直接包含在python代碼中:
from jinja2 import Markup
infoDict['js']= Markup(js)
這比在模板代碼中使用|safe
過濾器更可取,因為:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.