我对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。如果我从None
和ui
函数中排除url_for
,一切正常。
答案 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?