gpt4 book ai didi

python - Flask 重定向到索引时重定向到错误的 View

转载 作者:行者123 更新时间:2023-12-01 22:15:31 25 4
gpt4 key购买 nike

我一直遇到这个奇怪的问题,我似乎无法找到解决方案。我无法在这里完整复制并显示我的所有代码,但我将尝试概述我的 Flask 应用程序的一般结构来提出我的问题。

(让我们忽略 /static 文件夹和我的帮助程序模块中的所有内容)

我有 3 个主要 View ,我们称它们为 viewA、viewB 和索引:

viewA.html
viewB.html
index.html

viewA和viewB都显示两种表单,但内容不同(即viewA显示form1和form2,viewB也显示form1和form2)。

我的脚本代码的简化版本如下:

#imports
from flask import Flask, render_template, session, redirect, url_for, request
from flask_wtf import FlaskForm
#etc. etc.

app = Flask(__name__)
app.config['SECRET_KEY'] = 'blah blah blah'

manager = Manager(app)
bootstrap = Bootstrap(app)
moment = Moment(app)

class FormOne(FlaskForm):
sample_field = StringField('Sample Field:')


class FormTwo(FlaskForm):
other_field = StringField('Other Field:', validators=[Required()])
submit = SubmitField('Submit')


class UploadToA(FlaskForm):
content= StringField('Content to send to view A:', validators=[Required()])
submit = SubmitField('Submit')


class UploadToB(FlaskForm):
content= StringField('Content to send to view A:', validators=[Required()])
submit = SubmitField('Submit')


@app.route('/ViewA', methods=['GET', 'POST'])
def view_a():
"""
A lot of data manipulation
"""

form1 = FormOne()
form2 = FormTwo()

if request.method == 'GET':
"""
populate forms with content
"""

if request.method == 'POST':
if form2.validate_on_submit();
"""
clear session variables
"""
return redirect(url_for('index'), code=302)
return render_template('viewA.html', form1=form1, form2=form2)

@app.route('/ViewB', methods=['GET', 'POST'])
def view_b():
"""
A lot of data manipulation
"""

form1 = FormOne()
form2 = FormTwo()

if request.method == 'GET':
"""
populate forms with content
"""
if request.method == 'POST':
if form2.validate_on_submit();
"""
clear session variables
"""

return redirect(url_for('index'), code=302)
return render_template('viewB.html', form1=form1, form2=form2)

@app.route('/', methods=['GET', 'POST'])
def index():
"""
Some data manipulation
"""

formA = UploadToA()
formB = UploadToB()

if formA.validate_on_submit()':
"""
pull content from form A
create some session variables
"""

return redirect(url_for('view_a'))
if formB.validate_on_submit()':
"""
pull content from form B
create some session variables
"""

return redirect(url_for('view_b'))
return render_template('index.html', formA=formA, formB=formB)

if __name__ == '__main__':
manager.run()

现在我遇到的问题是,由于某种奇怪的原因,当我在“viewA.html”中提交表单时,我应该被重定向回“viewA.html” >index.html',但由于某些奇怪的原因,它将我重定向到“viewB.html”。此外,相反的情况也成立:当我在“viewB.html”中并提交表单时,我也应该被重定向回“index.html”但它会将我重定向到“viewA.html”。然而,如果我在 viewA 或 viewB 中,如果我在浏览器中手动输入 url,则返回索引 View 不会有任何问题。

关于为什么我可能会遇到这个问题有什么想法吗?

提前致谢:)

最佳答案

我终于找到问题的根源了。事实证明,在我的“viewA.html”模板文件中,我的 < form > 标记中有以下内容:

<form class="form form-horizontal" method="post" role="form" action="{{url_for('index')}}">

问题就出在最后一部分:

action="{{url_for('index')}}"

因此,每次我在 viewA.html 中提交 form2 时,它都会为我的索引页面创建一个发布请求,而不是为 viewA.html 页面(导致重定向到错误的 View )。因此,通过简单地删除操作属性 (action="{{url_for('index')}}"),我就能够解决我的问题!

关于python - Flask 重定向到索引时重定向到错误的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47083304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com