想法是用户按下按钮,Flask应该在页面上添加一些内容。
在我的情况下,python和Flask 不是一个随意的选择,因为Python做了很多后门工作(例如js不能)。
完美的是它应该只是一个页面而没有在另一个页面上重定向。
所以我的问题是:
答案 0 :(得分:1)
正如其中一位评论者所说,您缺少与您合作的Web开发堆栈中的一些关键概念。 Lemme试着解释一下。
浏览器向后端发出请求有两种基本方式。加载页面时。当您的Javascript代码发出XHR请求时。
您的前端有三种基本方式来响应用户操作。
基本上,有两种方法可以做你想要的,旧的方式,你有Flask应用程序生成包含新内容的整个页面并将其发送到浏览器。这将使浏览器重新加载页面。而新的方式,你的Flask应用程序只提供你想要更改的数据和浏览器中的javascript在后台发出XHR请求并使用数据来更新页面。这可以在没有重新加载的情况下发生,这是大多数现代Web应用程序的工作方式。
我希望这能为你解决一些问题。
答案 1 :(得分:0)
from flask import Flask,render_template,request
app = Flask(__name__)
@app.route("/add_item")
def add_item():
#in reality you are doing something else i imagine
return "<li>%s</li>"%(request.args.get('name'))
@app.route('/')
def hello_world():
return render_template('index.html',items=["Item 1","Item 2","Item 3"])
if __name__ == '__main__':
app.run()
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://code.jquery.com/jquery-3.2.1.js"></script>
</head>
<body>
<ul id="items_holder">
{% for item in items %}
<li>{{ item }}</li>
{% endfor %}
</ul>
<button id="do_something">Do Something</button>
</body>
<script src="/static/app.js"></script>
</html>
$(function(){
$("#do_something").click(function(){
var item_name = prompt("enter item name")
$.get("/add_item?name="+item_name,function(result_data){
$('#items_holder').append(result_data)
})
})
})