将ID从HTML发送到Flask Python

时间:2016-11-16 09:14:58

标签: python flask blogs

我是Flask的初学者 - Python。现在我正在创建评论功能。在下面的代码中,我可以列出博客的所有评论或类似的东西。但现在,我想创建删除每个博客的按钮。请告诉我如何将blog_id(现在保存为user_comment._id)发送到服务器以及如何在服务器上请求它。

       {% for user_comment in user_comments %}
            <form action="{{ url_for('comments.del_comment') }}" method="post">
                <ul class="comments-list">
                    <li class="comment">
                        <a class="pull-left" href="#">
                            <img class="avatar" src="http://bootdey.com/img/Content/user_1.jpg" alt="avatar">
                        </a>
                        <div class="comment-body">
                            <div class="comment-heading">
                                <h4 class="user">{{ user_comment.email }}</h4>
                                <h5 class="time">{{ user_comment.created_date }}</h5>
                            </div>
                            <p>{{ user_comment.comment }}</p>
                        </div>
                    </li>
                    <li>
                        <button type="submit" class="btn btn-primary">Delete</button>
                    </li>
                </ul>
           </form>
       {% endfor %}

2 个答案:

答案 0 :(得分:3)

实际上,您可以将每个注释的ID存储在按钮的数据属性中。然后定义类似'/comments/<id>/delete/'的路线以删除评论。为了防止仅通过在浏览器中调用URL来删除注释,我建议仅限路由到DELETE方法并通过ajax请求调用它。

因此,请将以下路线添加到views.py

@main.route('/comments/<comment_id>/delete', methods=['DELETE'])
def delete_comment(comment_id):
    comment = Comment.query.get(comment_id)
    if comment is None:
        return jsonify(
            status='error', message='no comment with id {}'.format(comment_id))
    db.session.delete(comment)
    db.session.commit()
    return jsonify(status='ok')

您的删除按钮应如下所示:

<button href="" class="btn btn-primary delete_comment" data-id="{{ user_comment.id }}/>

在你的模板中添加一个小的ajax请求:

<script>
$(document).ready(function() {

    $SCRIPT_ROOT = {{ request.script_root|tojson|safe }};

    // Delete comment
    $('.delete_comment').click(function(event) {
      var comment_id = $(this).data('id');
      var url = $SCRIPT_ROOT + '/comments/' + comment_id + '/delete';
      $.ajax({
        url: url,
        type: 'DELETE',
      }).done(function(data) {
        location.reload();
      });
    });
});
</script>

答案 1 :(得分:0)

  

为按钮指定名称和值:

<input type="submit" name ="btn1" value="delete_blog " class="btn btn-primary" />
  

如下所示,用烧瓶调用按钮:

def delete_blog():
    if request.method == 'POST':
        if request.form['btn1'] == 'delete_blog':
            pass # do something
        else:
            pass # do something else
    elif request.method == 'GET':
        return render_template('blog.html', form=form)

我希望有所帮助,这个问题有点令人困惑。