在flask程序中,将变量name传到前台js代码中通过{{ name }}显示不正常

在flask程序中,将变量值传到前台,在html代码中这样写{{ payment_uid }}能正常显示,但是在js代码中这样写{{ payment_uid }}显示不正常,我感觉是不是在js代码中转化成数值型了?、


flask代码


# coding:utf-8

from flask import Flask, render_template


app = Flask(__name__)



@app.route('/')

def hello_world():

    name = '012'

    return render_template('index.html', name=name)


if __name__ == '__main__':

    app.run()

    

html代码


<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>Title</title>


</head>

<body>

{{ name }}

</body>

<script>

    alert({{ name }})

</script>

</html>


显示结果为

https://img2.mukewang.com/5c4c299200018d1508000149.jpg

如果把变量name的值换为'abc'非数字的,则在js代码中不显示。
我很好奇这是为什么???

慕容森
浏览 1011回答 1
1回答

温温酱

首先来解析一下 js 代码。<script>&nbsp; &nbsp; alert({{ name }})</script>在name=012的情况下,jinja2 代码解析为 html 的内容如下<script>&nbsp; &nbsp; alert(012)</script>也就是说你这是直接操作alert(012)。这里有一个凸显我的知识储备不足的地方,就是为什么alert(012)之后显示是10,我粗略的测试了一下。从 1~9 ,如果前面加 0 的话,还是显示 1~9, 如果从 10~19 那么前面加 0 的话会出现不一样的效果,比如 010 对应的是 8 ,011 对应的是9,一直到 017,最终显示结果总是得减 2, 但是 018, 019还是显示原数字,我是不明觉厉了。而当你换成非数字的值的时候,则直接操作alert(abc),那么这时,就会报 abc 变量未定义的错误。因此你的代码需要改为如下内容:<script>&nbsp; &nbsp; alert("{{ name }}")</script>加上两个英文字符的双引号即可。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript