我是 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 View 函数:(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 的用户时,我被重定向到正确的 View ,其结束 url:/viewref/productCat/269
(26是帖子 ID,9 是用户 ID)。太棒了,它有效,我看到了一个帖子!
问题:
但是当 ID 10 或更高(12、299 等)的用户在 url_for
中传递时,view_post
的查询函数从数据库中提取 None
,随后我的 view_post.html 模板抛出错误
(UndefinedError: 'None' has no attribute 'product_category_by')
有什么联系?
view_post
函数的关键是仅通过给定的 post_id
获取帖子。为什么在用户 ID > 9 的情况下会得到 None
,如果我的函数仅采用 post_id 进行查询,而其他变量仅用于 url 构造?
附言如果我从 url_for
和 view_post
函数中排除 ui
一切正常。
最佳答案
我不确定您希望 URL 路由器如何判断 post_id
结束和 ui
开始的位置。您应该使用实际的分隔符:
@app.route('/viewref/<pc>/<int:post_id>/<int:ui>')
关于python - Flask url_for 停止接受两位数的用户 ID。漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31560613/