我正在使用slugify,我不知道如何让我的帖子标题更加强化,我是否需要在帖子中创建一个新专栏?我整天都被困在这里。
有什么建议吗?
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()
答案 0 :(得分:2)
您在视图和查询数据库中根据slug取slug
而不是title
。在创建帖子时slugify
标题并将其存储在slug
字段中。
<强> Views.py 强>
@app.route('/posts/<slug>')
@login_required
def show(slug):
post = db.session.query(Post).filter_by(slug = slug).first()
if post:
return render_template("post.html", post=post)
abort(404)
请注意,我们在这里使用的是.first
而不是.one
,因为如果找不到帖子,.first
会返回None
,而.one
会引发您需要的异常根据它捕捉和流动。
如果找不到帖子,我们将返回404
。
的 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)
slug = db.Column(db.String(80), index=True)
def __init__(self, title, body):
self.title = title
self.body = body
self.slug = slugify(title)
答案 1 :(得分:1)
我的猜测是你正在使用#34等帖子的标题;这是我的第一篇博客文章&#34;这很棒。我也猜测你想要使用slug,以便为每个帖子提供更友好的URL永久链接。在之前的案例中,slug会像&#34;这是我的第一篇博客文章&#34;
所以给了一个slug,你的帖子可以在/ posts / {unique-post-slug}路线上找到,而不是/ posts / {title}。我的建议是将slug存储在数据库中以便检索帖子,因为反向slugify并不那么容易。
总结你的模型应该是:
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)
slug = db.Column(db.Text, index=True)
def __init__(self, title, body):
self.title = title
self.body = body
self.slug = slugfiy(title)
请注意index=True
选项。这样做是为了加快查询速度。
应该发布你的帖子的路线是
@app.route('/posts/<slug>')
@login_required
def show(slug):
post = db.session.query(Post).filter_by(slug=slug).one()
return render_template("post.html", post=post)
在你的post.html文件中,你可以使用post.id,post.title等所有帖子字段(id,title,body,slug)