我有一个项目,其中mongodb记录通过Flask在浏览器中呈现。我在浏览器中也有一些交互,允许用户更新数据库中的记录。因此,例如,单击“投票给我”链接,您可以在记录上增加“投票”。该记录的投票结果将出现在“为我投票”链接旁边。
但是,目前我的投票路线看起来像这样,我必须重新加载页面以更新浏览器中的投票结果:
@app.route('/vote_up/<this_record>')
def vote_up(this_record):
vandalisms.update({'_id':bson.objectid.ObjectId(this_record)},
{"$inc" : { "votes": 1 }}, upsert=True)
return redirect("/")
我在这里查看了jquery和flask的烧瓶文档http://flask.pocoo.org/docs/patterns/jquery/,并了解那里发生了什么,但是没有看到如何将其扩展到我想要更新mongodb集合的情况首先,然后重新加载一个div或span,指定从更新的记录中呈现的新投票,例如
<span id='vote_tally'> {{ item.votes }} </span>
我必须做些什么才能将该行程包含在数据库中并返回浏览器而无需再次重新加载整个页面?
答案 0 :(得分:4)
我所做的是将这样的内容挂钩到click事件:
$('#vote_tally').load('/vote_up/3452/');
“ajax”url返回我想要修改的HTML。
@app.route('/vote_up/<this_record>')
def vote_up(this_record):
if already_voted_for(this_record):
return """<script type="text/javascript">
alert('You can only vote once');
</script>{0}""".format(count_votes_for(this_record))
vandalisms.update({'_id':bson.objectid.ObjectId(this_record)},
{"$inc" : { "votes": 1 }}, upsert=True)
return count_votes_for(this_record)