为什么在尝试使用渲染时出现此错误:
Traceback (most recent call last):
File "d:\Projects\jara.md\backend\flask\__init__.py", line 31, in <module>
@app.route('/update/<int:adv_id>', methods=['PUT'])
File "c:\Python27\lib\site-packages\flask\app.py", line 1080, in decorator
self.add_url_rule(rule, endpoint, f, **options)
File "c:\Python27\lib\site-packages\flask\app.py", line 64, in wrapper_func
return f(self, *args, **kwargs)
File "c:\Python27\lib\site-packages\flask\app.py", line 1051, in add_url_rule
'existing endpoint function: %s' % endpoint)
AssertionError: View function mapping is overwriting an existing endpoint function: start
代码清单是:
app = Flask(__name__)
@app.route('/add', methods=['POST'])
def add():
return 'Add'
@app.route('/start/<int:adv_id>', methods=['PUT'])
def start(adv_id):
return 'start'
### Rendering ###
@app.route('/add', methods=['GET'])
def add():
return render_template('add.html')
if __name__ == "__main__":
app.run()
正如您所看到的,我有两种方法add()
用于GET和POST请求。
这条消息是什么意思?
self.add_url_rule(rule, endpoint, f, **options)
@app.route('/update/<int:adv_id>', methods=['PUT'])
def start(adv_id):
return 'update'
答案 0 :(得分:1)
这就是问题所在:
tags/show.html.erb
您查看的名称应该是唯一的。您不能有两个具有相同名称的烧瓶视图方法。名称开始并将方法添加到其他内容并且是唯一的。
[编辑]
正如@Oleg问道/评论说这个独特的名字是一个缺点。如果您阅读Flask的源代码,原因很清楚。来自source code
@app.route('/update/<int:adv_id>', methods=['PUT'])
def start(adv_id):
return 'update'
因此,烧瓶将URL规则映射到视图功能的名称。在@ app.route中你没有传递一个名字,所以烧瓶采取方法名称从中创建规则。由于这张地图是字典,因此它必须是唯一的。
因此,您可以使用相同名称的视图函数(只要您为视图传递不同的名称,就不应该这样做)