#javascript #python #flask
Вопрос:
Я намерен построить линейный график на веб-странице, используя колбу и charts.js Я всего лишь новичок, поэтому я перешел по ссылке(https://www.youtube.com/watch?v=E2hytuQvLlEamp;lc=UgzWBrS2GEx1BnNgs2V4AaABAg) для реализации этой программы, но она не работает, ошибка на веб-странице упоминается в конце вопроса.
Это мой код на python
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/home")
def home():
plot_data = [
("3-01-2020", 6),
("3-02-2020", 13),
("3-03-2020", 14),
("3-04-2020", 41),
("1-05-2020", 10),
("3-06-2020", 0),
("3-07-2020", 16),
("3-08-2020", 10),
("3-09-2020", 17),
("3-10-2020", 19),
]
labels = []
values = []
for row in plot_data:
labels.append(row[1])
values.append(row[0])
return render_template('graph.html', lables=labels, values=values)
if __name__ == "__main__":
app.run(debug=True)
Это мой HTML-код.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Chart view</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.3.2/chart.min.js"></script>
</head>
<body>
<canvas id = "voltage_graph" width="900" height="400"></canvas>
<script>
var ctx = document.getElementById("voltage_graph").getContext("2d");
var lineChart = new Chart(ctx,{
type: "line",
data:{
labels: {{labels | safe}}
datasets: [
{
label: "BMS_CELL_01_voltage",
data: {{values | safe}},
fill : false,
borderColor:"rgb(75,192,192)",
lineTension: 0.1
}
]
},
Options:{
responsive: false
}
});
</script>
</body>
</html>
Это мой вывод терминала
C:UsersrohitAppDataLocalProgramsPythonPython37python.exe C:/Users/rohit/PycharmProjects/flask-projects/applicaton.py
* Serving Flask app 'application (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Restarting with stat
* Debugger is active!
* Debugger PIN: 275-482-683
* Running on http://127.0.0.1:5000/ (Press CTRL C to quit)
когда я запускаю это, все, что я получаю, — это ошибка на веб-сайте, указывающая, как указано выше
любая помощь будет признательна, заранее спасибо.
Комментарии:
1.
@app.route("/home")
маршрут есть/home
, и вы положили127.0.0.1:5000
, что он должен быть127.0.0.1:5000/home
2. но сейчас я получаю пустой экран
3. щелкните правой
view page resource
кнопкой мыши, щелкните и проверьте, получаете ли вы нужную страницу или нет.4. я получаю страницу, но на ней написано Неперехваченная ошибка синтаксиса: Неожиданный токен ‘:’ главная страница:18
Ответ №1:
Несколько проблем в коде, который вы опубликовали:
lables=
неправильно прописаноapp.py
, должно бытьlabels=
labels.append(row[1])
следует использоватьrow[0]
, предполагая, что вы хотите, чтобы даты использовались в качестве меток (и наоборот, гдеvalues
следует использоватьrow[1]
вместо этого)labels: {{labels | safe}}
отсутствует запятая в конце
Как только вы устраните эти проблемы, ваш график отобразится при переходе к localhost:5000/home
.
ИЗМЕНИТЬ: Для полноты картины, вот рабочий код. В app.py
:
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/home")
def home():
plot_data = [
("3-01-2020", 6),
("3-02-2020", 13),
("3-03-2020", 14),
("3-04-2020", 41),
("1-05-2020", 10),
("3-06-2020", 0),
("3-07-2020", 16),
("3-08-2020", 10),
("3-09-2020", 17),
("3-10-2020", 19),
]
labels = []
values = []
for row in plot_data:
labels.append(row[0])
values.append(row[1])
print(labels)
print(values)
return render_template('graph.html', labels=labels, values=values)
if __name__ == "__main__":
app.run(debug=True)
И в templates/graph.html
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Chart view</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.3.2/chart.min.js"></script>
</head>
<body>
<canvas id = "voltage_graph" width="900" height="400"></canvas>
<script>
var ctx = document.getElementById("voltage_graph").getContext("2d");
var lineChart = new Chart(ctx,{
type: "line",
data:{
labels: {{labels | safe}},
datasets: [
{
label: "BMS_CELL_01_voltage",
data: {{values | safe}},
fill : false,
borderColor:"rgb(75,192,192)",
lineTension: 0.1
}
]
},
Options:{
responsive: false
}
});
</script>
</body>
</html>