4

我有一个项目,其中 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("/")

我在这里http://flask.pocoo.org/docs/patterns/jquery/看了一下 jquery 和烧瓶的烧瓶文档,并了解那里发生了什么,但不知道如何将其扩展到案例我想先更新 mongodb 集合,然后重新加载一个 div 或 span,指定从更新的记录呈现的新投票,例如

    <span id='vote_tally'> {{ item.votes }} </span>

我必须做些什么才能包含到数据库并返回浏览器而不必再次重新加载整个页面?

4

1 回答 1

4

我所做的是将这样的事情挂钩到点击事件:

$('#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)
于 2012-07-21T06:25:17.267 回答