文章内容

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路径的一些问题

分享到:

发表评论

评论列表