烧瓶 - 创建视图模板?

时间:2017-11-29 17:51:46

标签: python flask

为什么在尝试使用渲染时出现此错误:

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'

1 个答案:

答案 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中你没有传递一个名字,所以烧瓶采取方法名称从中创建规则。由于这张地图是字典,因此它必须是唯一的。

因此,您可以使用相同名称的视图函数(只要您为视图传递不同的名称,就不应该这样做)