В моем server.py у меня есть список, который отслеживает имена:
data = [
"Jim",
"Stanley",
"Michael",
"Kevin",
"Kelly"
]
выполнение {{data|tojson}} у меня не работает, потому что данные в этом формате не сериализуются. Выполнение return render_template('ppc.html', data=data) также не позволяет файлу js обращаться к данным в server.py. Я также пробовал '{{data}}' этот формат, предложенный в некоторых постах, но ни один из них не работает. У кого-нибудь есть другой способ?
это ошибка типа, выдаваемая python. Сериализуемые данные JSON похожи на {"name": name}
Представьте свои минимальный воспроизводимый пример, четко, описывающие вашу цель, вашу попытку, ваше ожидание, результат вместо этого и любые соответствующие детали.






Используйте метод jsonify. Это позволит вернуть list из view. Документация для jsonify.
Вот пример того, как загрузить данные в шаблон с помощью Javascript.
Структура папки:
├── app.py
├── static
│ └── demo.js
└── templates
└── simple.html
app.py:
from flask import Flask, render_template, jsonify
app = Flask(__name__)
@app.route("/get_data", methods=['GET'])
def get_data():
data = ["Captain America", "Hulk", "Thor", "Wolverine"]
return jsonify(data)
@app.route("/")
def index():
return render_template("simple.html")
app.run(debug=True)
simple.html:
<html>
<head>
<title>Marvel Characters</title>
</head>
<body>
<h3>List of Marvel Characters loaded from JS</h3>
<div id = "result"></div>
<script src = "{{ url_for('static', filename='demo.js') }}"></script>
</body>
</html>
demo.js:
window.addEventListener("load", function(){
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var data = JSON.parse(this.responseText);
var result = document.getElementById("result");
for(var i=0;i<data.length; i++){
result.innerHTML += data[i]+"<br>";
}
}
};
xhttp.open("GET", "/get_data", true);
xhttp.send();
});
Выход:
Что именно вы подразумеваете под «несериализуемым»? И почему бы простому списку строк не быть таковым?