После долгих поисков здесь и в Интернете я не смог найти то, что мне нужно.Вот искаженный минимум проверяемого примера моей проблемы.
Чтобы установить фон для проблемы, вот фактический вариант использования, который я намереваюсь реализовать.На конечной точке /heatmap
есть тепловая карта, пользователи могут щелкнуть ячейки, и они должны быть перенаправлены на другую конечную точку /more-info-on-cell
.В зависимости от выбранной ячейки, пользователь получит разные результаты.Я почти получил ожидаемый результат.Единственная проблема заключается в том, что страница на самом деле неправильно отображается, потому что javascript /more-info-on-cell
по какой-то причине не выполняется.
Вот структура папок, которая вам требуется для этого примера:
root
|-templates
| -index.html
| -page.html
|-index.py
А вот и файлы: index.html
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>
<body>
<a id="clickMe" style="cursor: pointer">Click here to send POST to render template on the backend</a>
</body>
<script
src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"></script>
<script>
$(document).ready(function() {
$("#clickMe").on('click', function() {
console.log('clicked, making a request')
$.ajax({
type: 'POST',
url: '/',
data: JSON.stringify({}),
contentType: 'application/json',
success: function(response) { window.document.write(response); }
})
})
})
</script>
</html>
page.html
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>
<body>
The content of the document......
</body>
<script
src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"></script>
<script>
$(document).ready(function() {
alert('the doc is ready');
})
</script>
</html>
index.py
#!/usr/bin/env python3
from flask import Flask, request, render_template, jsonify
app = Flask(__name__)
@app.route("/", methods=["GET", "POST"])
def index():
if request.method == "GET":
return render_template('index.html')
elif request.method == "POST":
return render_template('page.html')
Вы можете проверить, чтоесли вы нажмете на ссылку в index.html
, вы будете успешно перенаправлены на page.html
, но его javascript никогда не будет выполнен.И поэтому вы никогда не получите предупреждение, которое мы определили в page.html
.
Проблема должна быть решена путем полной работы здесь с бэкэндом фляги, поскольку шаблоны в моем реальном сценарии использования также содержат переменные jinja.,Все работает отлично, если вы делаете запрос через form
с методом, имеющим правильный URL-адрес, и действием является POST.Хотя, как только я начинаю делать POST-запросы для javascript-клиента, это работает, когда я попадаю на нужную страницу, но она отображается неправильно + javascript для готового документа никогда не выполняется.