我想仿制微博评论的效果,就是发表评论之后,用户可以实时看见自己发的评论。我尝试了使用重定向return redirect('main.index'),可是这样的话,并不能聚焦到原来那条微博的评论列表下面。想请教下:1.如果想发表评论后用户能实时看见自己发表的评论,那么在Flask的路由中return语句应该怎么写?2.这种情况是否应该用ajax来解决??如果是的话,使用jQuery怎么与wtforms渲染的表单配合使用呢?
return redirect('main.index')
认证0级讲师
微博这种叫做单页应用(SPA),前后端分离通过api传递数据。只想仿评论效果,就是用你自己的答案,ajax提交后端api,保存后回调修改页面,wtform基本是摆设,没关系了。
最好把你的代码一起贴一下。
下面是我的建议
当你发表评论时,你肯定做的是提交表单,但是你需要在提交表单后面的重定向里面,让网站知道你刚才做的是评论所以,在你提交完以后的重定向里面,你可以加一个page=-1进去请看下面例子
@main.route('/post/<int:id>') def post(id): post = Post.query.get_or_404(id) form = CommentForm() if form.validate_on_submit(): comment = Comment(body = form.body.data, post = post, author = current_user._get_current_object()) db.session.add(comment) flash('Your comment has been published.') return redirect(url_for('.post',id = post.id, page = -1)) page = request.args.get('page',1,type=int) if page == -1: page = (post.comments.count()-1)//current_app.config['FLASKY_COMMENTS_PER_PAGE']+1 pagination = post.comments.order_by(Comment.timestamp.asc()).paginate( page,per_page = current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out = False) comments = pagination.items return render_template('post.html',posts=[post],form = form,comments=comments,pagination = pagination)
里面代码的page是用来作为分页显示用的,你可以理解为url里面指向第几页的参数当他提交完表单以后,做的是重定向return redirect(url_for('.post',id = post.id, page = -1))并且,url_for是可以带**kwargs的,这样,你的请求里面就带有一个page=-1下面语句当 page == -1时,他通过计算(现有有评论总数)除以(每页显示的评论数),计算出最后一页的页数是几
并重新赋值给page,这个时候,在下面的评论页面(分页显示的话),就会直接显示到最后一页你的评论那里了不知道我这样说的话你是否清楚。
使用Websocket吧,网站上了规模总有适用于websocket的情形,单页应用的话倒不是必须的。
微博这种叫做单页应用(SPA),前后端分离通过api传递数据。
只想仿评论效果,就是用你自己的答案,ajax提交后端api,保存后回调修改页面,wtform基本是摆设,没关系了。
最好把你的代码一起贴一下。
下面是我的建议
当你发表评论时,你肯定做的是提交表单,但是你需要在提交表单后面的重定向里面,让网站知道你刚才做的是评论
所以,在你提交完以后的重定向里面,你可以加一个page=-1进去
请看下面例子
里面代码的page是用来作为分页显示用的,你可以理解为url里面指向第几页的参数
当他提交完表单以后,做的是重定向return redirect(url_for('.post',id = post.id, page = -1))
并且,url_for是可以带**kwargs的,这样,你的请求里面就带有一个page=-1
下面语句当 page == -1时,他通过计算(现有有评论总数)除以(每页显示的评论数),计算出最后一页的页数是几
并重新赋值给page,这个时候,在下面的评论页面(分页显示的话),就会直接显示到最后一页你的评论那里了
不知道我这样说的话你是否清楚。
使用Websocket吧,网站上了规模总有适用于websocket的情形,单页应用的话倒不是必须的。