【问题标题】:How to add slug to flask blog app如何将 slug 添加到烧瓶博客应用程序
【发布时间】:2018-10-01 13:23:38
【问题描述】:

最近我正在尝试按照 Grinberg Miguel Flask 大型教程建立一个博客。当我尝试添加我的帖子标题时,我得到了库存,以便在单击它时会显示详细信息。这是我的代码:

(模型.py)

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(225))
    slug = db.Column(db.String(300))
    body = db.Column(db.Text)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)

def __repr__(self):
    return '<Post {}>'.format(self.body)

@staticmethod
def slugify (target, value, oldvalue, initiator):
    if value and (not target.slug or value != oldvalue):
        target.slug = slugify(value)
db.event.listen(Post.title, 'set', Post.slugify, retval=False)

my ROUTE code goes here:
from app.models import  Post

@bp.route('/', methods=['GET', 'POST'])
@bp.route('/index', methods=['GET', 'POST'])
def index():
    page = request.args.get('page', 1, type=int)
    posts = Post.query.order_by(Post.timestamp.desc()).paginate(
    page, current_app.config['POSTS_PER_PAGE'], False)
    next_url = url_for('main.explore', page=posts.next_num) \
    if posts.has_next else None
        prev_url = url_for('main.explore', page=posts.prev_num) \
    if posts.has_prev else None
return render_template('index.html', title=_('Home'),
                       posts=posts.items, next_url=next_url,
                       prev_url=prev_url)

@bp.route('/explore',methods=['GET', 'POST'])
@login_required
def explore():
    form = PostForm()
    if form.validate_on_submit():
        post = Post(body=form.post.data, author=current_user)
        db.session.add(post)
        db.session.commit()
        flash(_('Your post is now live!'))
        return redirect(url_for('main.index'))
    return render_template('create.html', title=_('Create'),form=form)

@bp.route('/<slug>')
def detail(slug):
    posts = Post.query.order_by(Post.timestamp.desc()).paginate(
    page, current_app.config['POSTS_PER_PAGE'], False)
return render_template('detail.html', title=_('Home'),
                       posts=posts.items, next_url=next_url,
                       prev_url=prev_url)

我在运行代码时看到了这个错误:

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) 没有这个 柱子: post.title [SQL: 'SELECT post.id AS post_id, post.title AS post_title, post.slug AS post_slug, post.body AS post_body, post.timestamp AS post_timestamp, post.user_id AS post_user_id

【问题讨论】:

  • 您是否使用 Flask-Migrate 来处理您的数据库架构更改?该错误与您正在使用的 slug 功能无关,SQLAlchemy 抱怨您的 post 表没有 title 列。你已经在你的模型中定义了它,所以你似乎没有对你的数据库应用相应的更改。
  • 是的,我正在使用烧瓶迁移。
  • 我已经完成了数据库迁移升级。但是有库存 index.html.{% for post in posts %}

    {{ post.标题 }}

    {{ post.body|safe }}

    {% include '_post.html' %} {% endfor %} 也是我的 detail.html:{% block app_content %} {{posts.title}} {{posts.body}} {% endblock %} 和
  • 抱歉,我不明白你遇到的这个新问题是关于什么的。你有任何错误吗?
  • 我得到了这个:文件“/root/ogahslab/app/templates/base.html”,第 50 行,在块“内容”中 {% block app_content %}{% endblock %} 文件“/ root/ogahslab/app/templates/index.html",第 8 行,在块 "app_content"

    {{ post.title }}

    文件“/root/ogahslab/venv/lib/python3.6/site-packages/flask/helpers.py”,第 333 行,在 url_for 返回 appctx.app.handle_url_build_error(错误,端点,值) werkzeug.routing.BuildError:无法为端点“main.detail”构建 url。您是否忘记指定值 ['slug']?

标签: python flask slugify


【解决方案1】:

只要确保类名与表名匹配即可。并且代码应该可以正常运行

【讨论】:

    猜你喜欢
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多