def ensure_slug(self, dbsession) -> str:
"""Make sure post has a slug.
Generate a slug based on the title, but only if blog post doesn't have one.
:return: Generated slug as a string
"""
assert self.title
if self.slug:
return
for attempt in range(1, 100):
generated_slug = slugify(self.title)
if attempt >= 2:
generated_slug += "-" + str(attempt)
# Check for existing hit
if not dbsession.query(Post).filter_by(slug=generated_slug).one_or_none():
self.slug = generated_slug
return self.slug
raise RuntimeError("Could not generate slug for {}".format(self.title))
评论列表
文章目录