Flask url_for停止接受两位数的用户ID。 BUG?

时间:2015-07-22 10:32:50

标签: python postgresql flask sqlalchemy flask-sqlalchemy

我对Flask相对较新,我无法弄清楚我的功能有什么问题,也没发现有人遇到过同样的问题。甚至很难解释。

模板url_for链接:

<a href="{{ url_for('view_post', pc=post.product_category_by.product_cat_name, post_id=post.id, ui=post.author_id) }}">

Flask视图功能(Flask SQLAlchemy.PostgreSQL)

@app.route('/viewref/<pc>/<int:post_id><int:ui>')
    def view_post(pc, post_id, ui):
    post = db.session.query(Post).filter_by(id=post_id).first()
    db.session.commit()
    gc.collect()
    return render_template('view_post.html', post=post)

示例:

让我们发一个ID 26 的帖子和两个ID 9 10 的用户(或帖子的作者)。当我通过ID 9 的用户时,我会使用结束网址重定向到正确的视图:/viewref/productCat/269 26 是帖子ID且 9 是用户ID)。很好,它有效,我看到了一个帖子!

问题:

但是当url_for中传递ID 10 或更高(12,299等)的用户时,view_post函数的查询会提取{{1}从数据库,随后我的view_post.html模板抛出错误

None

连接是什么?

(UndefinedError: 'None' has no attribute 'product_category_by') 函数的关键是仅按给定view_post获取帖子。为什么在用户ID&gt;的情况下会得到post_id 9,如果我的函数只为查询提取post_id而其他变量仅用于url构造?

P.S。如果我从Noneui函数中排除url_for,一切正常。

2 个答案:

答案 0 :(得分:2)

我不确定您是如何期望URL路由器告诉post_id结束和ui开始的位置。您应该使用实际的分隔符:

@app.route('/viewref/<pc>/<int:post_id>/<int:ui>')

答案 1 :(得分:1)

我认为你应该改变你的URL方案。如果用户ID为12且post_id为34,该怎么办?在你的URL中,它将连接到1234.我们如何区分post_id:1,user_id:234与post_id:123,user_id:4?