为了将一些上下文数据传递给JavaScript代码,您需要以JavaScript(即JSON)“理解”的方式对其进行序列化。您还需要使用safe
Jinja过滤器将其标记为安全,以防止数据被HTML转义。<\p>
您可以通过以下方式实现此目的:
视图
import json
@app.route('/')
def my_view():
data = [1, 'foo']
return render_template('index.html', data=json.dumps(data))
模板
<script type="text/javascript">
function test_func(data) {
console.log(data);
}
test_func({{ data|safe }})
</script>
编辑 - 精确答案
因此,为了实现您想要的功能(循环遍历项目列表并将它们传递给JavaScript函数),您需要单独对列表中的每个项目进行序列化。然后,您的代码将如下所示:
视图
import json
@app.route('/')
def my_view():
data = [1, "foo"]
return render_template('index.html', data=map(json.dumps, data))
模板
{% for item in data %}
<span onclick=someFunction({{ item|safe }});>{{ item }}</span>
{% endfor %}
编辑2
在我的例子中,我使用了Flask
框架。我不知道你正在使用哪个框架,但是你已经有了思路,只需要使它适应你所使用的框架即可。
编辑3(安全警告)
永远不要使用用户提供的数据执行此操作,只能使用可信数据进行此操作!
否则,你将会使你的应用程序面临XSS漏洞的风险!
{{item|tojson|safe}}
。 - Nick Garveytojson
过滤器),应该使用它们来代替。 - Mark Amery