文章内容
2018/10/28 10:26:42,作 者: 黄兵
关于flask url路径的一些问题
最近在项目中遇到一些问题,主要是关于flask中url的问题。
下面看一下两个url,在flask中存在什么问题:
第一个url: http://xxx.com/xxx/1
第二个url: http://xxx.com/xxx?id=1
这两个在flask里面的写法是不同的,造成了路由的获取方式也不同。
第一个如果在单独的js文件中,这么写:
<a class="add_pro_name" href="/manage/material_property_name/' + item[i]["id"] + '">增加属性 </a>
之后后台这么写:
@manage.route('/material_property_name/<int:id>', methods=['GET', 'POST'])
@login_required
@admin_required
def material_property_name(id):
那这个会报错,具体报错内容如下:
werkzeug.routing.BuildError
werkzeug.routing.BuildError: Could not build url for endpoint 'manage.material_property_name'. Did you forget to specify values ['id']?
报了一个路由错误,如果需要去掉这个错误,你需要使用url_for
,但是在单独的js文件里面,url_for
是无法被解析的。
需要修改源代码,如何修改看源代码:
<a class="add_pro_name" href="/manage/material_property_name?id=' + item[i]["id"] + '">增加属性 </a>
之后后台如此更改:
@manage.route('/material_property_name', methods=['GET', 'POST'])
@login_required
@admin_required
def material_property_name():
get_id=request.values.get('id',0)
print(get_id)
最后打印出了id的值,具体截图如下:
请求的url:
打印出来的id:
关于问题的一些思考:
在第一个url中,必须使用url_for
这种方式,后台匹配路由。url_for('xx',id=2)
这种方式需要在html template文件中,如果在单独的js文件中是无法被解析的(匹配不到id)。在html文件中,url_for
被jinja2解释翻译,所以没有问题。
而第二个直接传递一个参数,后台获取参数。
上面是个人的一些猜想,有问题欢迎大家讨论。
黄兵个人博客原创。
转载请注明出处:黄兵个人博客 - 关于flask url路径的一些问题
评论列表