在flask程序中,将变量name传到前台js代码中通过{{ name }}显示不正常,我感觉是不是在js代码中转化成数值型了?

新手上路,请多包涵

在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 lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
{{ name }}
</body>
<script>
    alert({{ name }})
</script>
</html>

显示结果为
clipboard.png

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

阅读 3.9k
1 个回答

首先来解析一下 js 代码。

<script>
    alert({{ name }})
</script>

name=012的情况下,jinja2 代码解析为 html 的内容如下

<script>
    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>
    alert("{{ name }}")
</script>

加上两个英文字符的双引号即可。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题