这是代码。我有一个模型,其中有一个类Item。
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']?
我想我不知何故应该独立传递物品?喜欢标题,内容和类别吗?我真的不确定。
答案 0 :(得分:1)
您需要在norm.twolc
函数中包含item
参数,而不是url_for
函数:
render_template
注意强>
此外,它与您的错误无关:您需要注意将 def create():
# ...
return redirect(url_for('view', item=item))
对象传递到Item
端点中的render_template()
函数。目前您只是传递项目标题。这与您在传递整个对象的view
端点中处理它的方式相矛盾。我假设你想要使用item对象的所有属性而不仅仅是标题。
作为补充,最好使用主键(create
)作为标题作为标题,因为您的项目标题可能会随着时间的推移而改变,或者可能存在欺骗,但ID将保持唯一。我提议的改变:
id