#javascript #python #jquery #html #ajax
#javascript #python #jquery #HTML #ajax
Вопрос:
Я создаю программу для ранжирования людей (не спрашивайте), и я думаю, что столкнулся с проблемой новичков — у меня есть желаемое значение, сгенерированное в python, которое я хочу сделать содержимым HTML-таблицы.
Таблица представляет собой таблицу лидеров, которая определяется путем нахождения человека с наибольшим количеством баллов (obv). У меня есть список из 10 лучших пользователей, и теперь я хочу поместить это в таблицу html. В идеале я хотел бы, чтобы это редактировало фактический html-файл, чтобы, когда один пользователь сгенерирует таблицу, он сохранял ее для следующего. (Я изменю функцию generateTable на кнопку)
Я безуспешно пытался использовать beautiful soup, я прочитал документацию, однако, похоже, я не смог найти решение.
По сути, я просто пытаюсь вызвать переменную python с помощью ajax. Однако я могу сделать обратное. Я новичок в программировании, если вы не можете сказать.
Я запускаю сервер python flask в своей локальной сети и использую Google sheets api в качестве временной базы данных.
server.py:
@app.route("/leader", methods=['POST'])
def leader():
name_and_score = []
length = int(changedata.next_available_row(2))
for x in range(2,length):
time.sleep(1.1)
name_and_score.append((int(changedata.index(x,7)), str((changedata.index(x,1)))))
print str(name_and_score) ' <--- This is everybody'
leaderboard = nlargest(10, name_and_score)
return str(leaderboard) ' <--- These are top 10'
leaderboard.html
<html>
<head>
<link rel="stylesheet" href="static/css/scoreboard.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
function generateTable() {
$.ajax({
method: 'POST',
url: "http://10.0.1.36:5000/leader",
success: function(response) {
console.log(response)
},
error: function(response) {
console.error(response)
}
});
}
window.onload=generateTable;
</script>
<p class = holder>Boys</p>
<table style="width:30%">
<tr>
<th>Name</th>
<th>Score</th>
</tr>
<tr>
<td id = 'person1'> Person </td>
<td id = 'person1_score'>45000</td>
<tr>
<td id = 'person2'> Person </td>
<td id = 'person2_score'>45000</td>
</tr>
<tr>
<td id = 'person3'> Person </td>
<td id = 'person3_score'>50000</td>
</tr>
</table>
</body>
</html>
Была бы очень признательна любая помощь в создании переменной python строки в соответствующей ячейке в html.
str (таблица лидеров) выглядит следующим образом: [(26316, ‘Name’), (6250, ‘Name’), (6667, ‘Name’), (6250, ‘Name’), (4545, ‘Name’), (36364, ‘Name’), (46154, ‘Name’)]
- Я опустил имена, однако они представляют собой разные значения.
Ответ №1:
Используйте json.dumps() вместо str (таблица лидеров), чтобы вы могли разобрать ее обратно в HTML.
return make_response(json.dumps(leaderboard),200)
дайте вашей таблице некоторый идентификатор:
<table id="myleaderboard" style="width:30%">...</table>
Затем проанализируйте его и заполните таблицу:
function generateTable() {
$.ajax({
method: 'POST',
url: "http://10.0.1.36:5000/leader",
success: function(response) {
console.log(response);
try {
let res = JSON.parse(response);
let table = document.getElementById("myleaderboard");
//clear table
table.innerHTML = "";
//populate
for (let i = 0;i < res.length; i ) {
const tr = document.createElement("tr");
const td1 = document.createElement("td");
const td2 = document.createElement("td");
td1.innerHTML = res[i][0]; //score
td2.innerHTML = res[i][1]; //name
tr.appendChild(td1);
tr.appendChild(td2);
table.appendChild(tr);
}
} catch(e){}
},
error: function(response) {
console.error(response)
}
});
}
Комментарии:
1. Большое спасибо за ваш ответ. Я отредактировал сообщение, как вы просили. Однако, когда я попытался запустить этот код, я получил сообщение об ошибке ‘AttributeError: объект ‘list’ не имеет атрибута ‘to_json». Я подозреваю, что это связано с тем, что таблица лидеров списка представляет собой список списков. Я попытаюсь решить это сейчас и дам вам знать. Большое спасибо!
2. все в порядке. я думал, вы используете pandas для nlargest (). последнее редактирование должно сработать для вас. использование json.dumps()
3. Хорошо, это сработало при создании таблицы, однако все значения в таблице ‘undefined’. Я думаю, это связано со строками, пытающимися получить имя и оценку. (.name и .score), поскольку я не думаю, что оценка атрибута и имя были определены.
4. td1.innerHTML = res[i][0]; //оценка td2.innerHTML = res[i][1]; //имя