如何将创建的帖子传递到Flask中自己的视图?

如何将创建的帖子传递到Flask中自己的视图?,flask,sqlalchemy,flask-sqlalchemy,Flask,Sqlalchemy,Flask Sqlalchemy,这是代码。我有一个模型,其中有一个类项 class Item(db.Model): id = db.Column(db.Integer,primary_key=True) title = db.Column(db.String(80),unique=True) content = db.Column(db.String(80),unique=True) category = db.Column(db.String(80)) def __init__(se

这是代码。我有一个模型,其中有一个类项

class Item(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    title = db.Column(db.String(80),unique=True)
    content = db.Column(db.String(80),unique=True)
    category = db.Column(db.String(80))

    def __init__(self,title,content,category):
        self.title = title
        self.content = content
        self.category = category

    def __repr__(self):
        return '<Item %r>' % self.title

@app.route('/create',methods=('GET','POST'))
def create():
    if request.method == 'POST':
        if request.form.get('title') and request.form.get('content'):
            item = Item(request.form['title'],request.form['content'],request.form['category'])
            flash('Item created successfully','success')
            db.session.add(item)
            db.session.commit()
            return redirect(url_for('view'),item=item)
        else:
            flash('Title and Content are required.','danger')
    form = ItemForm()
    return render_template('create.html',form=form)
@app.route('/view/<item>')
def view(item):
    query = Item.query.filter_by(title=item.title)
    return render_template('view.html',item=item)
我想我应该以某种方式独立地传递物品?如有需要,是否喜欢标题、内容和类别?我真的不确定

您需要在url\u for函数中包含item参数,而不是render\u模板函数:

def create():
    # ...
    return redirect(url_for('view', item=item))

此外,它与您的错误没有直接关系:您需要注意将Item对象传递给视图端点中的render_模板函数。此时,您正在传递项目标题。这与在传递整个对象的创建端点中处理它的方式相矛盾。我假设您希望使用item对象的所有属性,而不仅仅是标题

作为补充,最好使用主键id作为标识符作为标题,因为您的项目标题可能会随着时间的推移而改变,或者可能存在重复项,但id将保持唯一。我建议的改变:

@app.route('/view/<itemid>')
def view(itemid):
    item = Item.query.filter(itemid).first_or_404()
    return render_template('view.html', item=item)

你能发布你所想的全部create函数代码吗?我不确定您的意思是否是这个重定向应该放在if request.method=='POST'逻辑中?它已经存在,或者在函数返回时处于外部。这也是令人困惑的,因为无论请求是一篇帖子还是一篇正确的文章,它都是相同的返回?在这种情况下,我在哪里可以得到这个项目?目前,在外部循环中,我所拥有的只是object的形式,没关系,我得到了它。我没有注意到参数是在url_中传递的,而不是重定向部分。我认为你说的不是render_模板函数,而是输入了一个拼写错误?
@app.route('/view/<itemid>')
def view(itemid):
    item = Item.query.filter(itemid).first_or_404()
    return render_template('view.html', item=item)