gpt4 book ai didi

python - 将 slugfied 标题添加到 url

转载 作者:太空狗 更新时间:2023-10-30 02:30:30 24 4
gpt4 key购买 nike

我有一个像 /posts/1 这样的 url,其中 1 指的是数据库中文章的 id。

@bp.route('/<post_id>')
@login_required
def post(post_id):
""" find the post and then show it """
p = Post.query.get(post_id)
return render_template("post/single_post.html", post=p)

但是,我想做的是有一个 url,里面有一些 slugfied 标题,比如 /posts/1/my_stack_overflow_question_is_bad。我可以在模型中创建一个 slugify 属性:

class Post(db.Model):
__tablename__ = 'posts'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String)
html = db.Column(db.String)

@property
def slugified_title():
return slugify(self.title, separator="_", to_lower=True)

但我该如何将它放入 url 中呢?

最佳答案

您只需将 slug 元素添加到 URL 路由:

@bp.route('/<post_id>/<slug>')
@login_required
def post(post_id, slug):
""" find the post and then show it """
p = Post.query.get(post_id)
return render_template("post/single_post.html", post=p)

然后当您想要为其创建 URL 时——只需将 slug 提供给 url_for 函数:

p = Post.query.get(1)
url_for('post', post_id=p.id, slug=p.slugified_title)

这可能会有点乏味,所以我倾向于使用 permalink decorator :

# Inspired by http://flask.pocoo.org/snippets/6/

from flask import url_for

def permalink(function):
def inner(*args, **kwargs):
endpoint, values = function(*args, **kwargs)
return url_for(endpoint, **values)
return inner

然后调整我的模型来使用它:

class Post(db.Model):
__tablename__ = 'posts'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String)
html = db.Column(db.String)

@property
def slugified_title():
return slugify(self.title, separator="_", to_lower=True)

@permalink
def url(self):
# where 'post' is the title of your route that displays the post
return 'post', {'post_id': self.id, 'slug':self.slugified_title}

这样当我需要一个 url 时,我可以只向对象询问它的​​ url,而不必手动执行 url_for 步骤。

关于python - 将 slugfied 标题添加到 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26450945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com