これはコードです。私はクラスItemがあるモデルを持っています。作成した投稿をFlaskの独自のビューに渡すにはどうすればいいですか?
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)
ご覧のとおり、Itemクラスに基づいて作成ルートにアイテムを作成します。それから私はitem = itemをビューにリダイレクトする際のパラメータとして渡します。しかし、今はビューが私のアイテムを好きではありません。私はエラーが発生します:
BuildError: Could not build url for endpoint 'view'. Did you forget to specify values ['item']?
私は何とか独立してアイテムを渡すと思いますか?必要に応じてタイトルやコンテンツ、カテゴリなど私は本当にわからない。また
それは直接あなたのエラーに関連していない
def create():
# ...
return redirect(url_for('view', item=item))
注:
あなたが考えている作成機能コード全体を投稿できますか?あなたがこのリダイレクトがif request.method == 'POST'ロジックに入るべきであるということを意味するかどうかはわかりません。 (それは既にある)、または関数が返るように外部にある。リクエストがポストかゲット権かどうかに関係なく、同じリターンになるので混乱します。この場合、どこで商品を手に入れますか?現在、外側のループでは、私が持っているのはフォームオブジェクト – BigBoy1337
です。決して気にしません。私はパラメータがurl_forで渡されたことを忘れました、リダイレクト部分ではありません。私はあなたがrender_template関数の代わりにあなたが言ったときにあなたがタイプミスをしたと思いますか? – BigBoy1337