【发布时间】:2017-03-20 08:29:36
【问题描述】:
我正在使用 slugify,但我不知道如何使我的帖子标题 slugified,我需要在我的帖子中创建一个新列吗?我整天都被困在这上面。
有什么建议吗?
Views.py
@app.route('/posts/<title>')
@login_required
def show(title):
link = db.session.query(Post).filter_by(title = title).one()
link2 = slugify(link.title)
return render_template("post.html", post=link2, pid=id, title=link2)
Models.py
class Post(db.Model):
__tablename__ = "posts"
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(80))
body = db.Column(db.Text)
def __init__(self, title, body):
self.title = title
self.body = body
错误信息
File "C:\Program Files\Python35-32\lib\site-packages\sqlalchemy\orm\query.py", line 2760, in one
raise orm_exc.NoResultFound("No row was found for one()")
sqlalchemy.orm.exc.NoResultFound: No row was found for one()
【问题讨论】:
-
尝试登录
title。收到了吗? -
该错误仅表示它找不到任何行,而您期望一行。我通常使用
Post.query.filter_by(title=title).first()之类的东西,然后检查结果是否为空。 -
@btquanto 你能改一下我不明白的说法吗?
-
Post.query.filter_by(title=title).first() 有效,但是当我将 slugify 放在上面时它不起作用
-
我假设您使用的是
url_for('show', title=title)。这不起作用,因为您没有通过标题,而是通过了蛞蝓。当您查询数据库时,没有标题与 slug 匹配。如果您需要通过 slug 查询,那么是的,您应该将其存储在您的数据库中。