告诉重定向以模式模式打开窗体

2024-05-29 11:01:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在通过打开一个模式来填写一个表单(对一个项目的评论),我想让用户在提交表单之后能够最终编辑该表单

我目前正在从jinja模板触发模式,表单重定向到路由。 我如何从我的新路线edit_review重新打开模式,让用户有机会编辑他们的评论

模式中的我的表单标签是:

<form method=POST action="{{ url_for('review_perfume', id=perfume._id) }}" id="form-review">

我的review_perfume路线是:

@app.route("/perfume/review/<id>", methods=["POST", "GET"])
@login_required
def review_perfume(id):
    form = AddReviewForm()
    perfume = mongo.db.perfumes.find_one({"_id": ObjectId(id)})
    if form.validate_on_submit():
        review_id = ObjectId.from_datetime(datetime.utcnow())
        mongo.db.perfumes.update(
            {"_id": perfume["_id"]},
            {
                "$push": {
                    "reviews": {
                        "_id": review_id,
                        "review_content": form.review.data,
                        "reviewer": current_user.username,
                        "date_reviewed": datetime.utcnow(),
                        "reviewer_picture": current_user.avatar,
                    }
                }
            },
        )
        flash("Your review has been received", "success")
        return redirect(url_for("perfume", id=perfume["_id"]))
    return redirect(url_for("perfume", id=perfume["_id"]))

我的edit_review路线将包括:

@app.route("/edit_review/<review_id>/<perfume_id>")
@login_required
def edit_review(review_id, perfume_id):
    mongo.db.perfumes.update(
        {"_id": ObjectId(perfume_id), "reviews._id": ObjectId(review_id)},
        {"$set": {"reviews.$.review_content": "This is my newest content."}},
    )
    flash("Your review has been updated!", "success")
    return redirect(url_for("perfume", id=perfume_id))

(使用表单中的正确数据)但我想知道如何从中打开模式以更新我的数据库

请帮忙

谢谢


Tags: formidurl表单fordbdatetimemongo
1条回答
网友
1楼 · 发布于 2024-05-29 11:01:17

在路由中设置一个布尔变量,例如:show_modal_on_page_load,以指示希望在页面加载和Jinja模板写入逻辑中显示给定变量状态的模式

在使用重定向时,有必要使用会话变量在重定向周围传递show_modal_on_page_load状态

以下是流程的大致示意图:

from flask import Flask, render_template, redirect, url_for, request, session

@app.route("/edit_review/<review_id>/<perfume_id>")
@login_required
def edit_review(review_id, perfume_id):
    mongo.db.perfumes.update(
        {"_id": ObjectId(perfume_id), "reviews._id": ObjectId(review_id)},
        {"$set": {"reviews.$.review_content": "This is my newest content."}},
    )
    flash("Your review has been updated!", "success")
    session['show_modal_on_page_load'] = True
    return redirect(url_for("perfume", id=perfume_id))


@app.route("/perfume/<perfume_id>")
@login_required
def perfume(perfume_id):

    #  pop the variable of the session
    show_modal_on_page_load = session.pop('show_modal_on_page_load', False)

    ####

    return render_template('perfume.html', show_modal_on_page_load=show_modal_on_page_load)

有很多例子说明了如何在页面加载时显示模式,例如,Launch Bootstrap Modal on page load

Template.html:

$(window).on('load',function(){
    {{ if show_modal_on_page_load }}
        var delayMs = 1500; // delay in milliseconds

        setTimeout(function(){
            $('#myModal').modal('show');
        }, delayMs);
    {{ endif }}
});

<div class="modal fade" id="myModal">
      <div class="modal-dialog modal-lg modal-dialog-centered" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h4 class="modal-title">My Modal</h4>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">×</span>
                    </button>
                </div>
                <div class="modal-body">
                    ...
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary mx-auto" data-dismiss="modal">Close</button>
                </div>
            </div>
      </div>
</div>

相关问题 更多 >

    热门问题