Во-первых, надо сказать, в общем, вы должны абсолютно не должны делать это . app.secret_key
никогда не должно быть публично разоблачено и должно рассматриваться как тщательно охраняемый секрет. Отсюда и название. Но поскольку вы делаете это по вполне понятным причинам, связанным с вашей игрой, давайте продолжим.
Вероятно, самый простой способ выставить Python переменные для JavaScript непосредственно в шаблоне - выгрузить JSON. Рассмотрим следующий код:
import json
from flask import Flask, render_template
app = Flask(__name__)
app.secret_key = 'THIS IS SECRET'
@app.route('/')
def hello_world():
server_vars = {
'secretKey': app.secret_key,
'favoriteFoods': ['Eggs', 'Spam']
}
return render_template(
'hello.html',
server_vars=json.dumps(server_vars)
)
if __name__ == '__main__':
app.run()
Мы визуализируем шаблон hello.html
и отправляем ему переменную шаблона server_vars
, представляющую собой строку JSON для той же серверной переменной, которая это словарь Это позволяет нам отправлять любое количество произвольных JSON -совместимых переменных в JavaScript. См. hello.html
:
<!doctype html>
<html lang="en">
<head>
<title>Document</title>
</head>
<body>
<script>
window.serverVars = {{ server_vars | safe }};
alert(window.serverVars.secretKey)
console.log('btw, my favorite foods are', window.serverVars.favoriteFoods)
</script>
</body>
</html>
Обратите внимание, что в дополнение к отправке secretKey мы фактически отправили список Python, который был преобразован в массив в JavaScript.