1. ホーム
  2. python

[解決済み] AssertionErrorです。ビュー関数のマッピングが既存のエンドポイント関数を上書きしています: main

2022-02-11 03:31:35

質問

次のような2つのurlルールがある場合、なぜ既存のエンドポイント関数を上書きできないか、誰か知っていますか?

app.add_url_rule('/',
                 view_func=Main.as_view('main'),
                 methods=["GET"])

app.add_url_rule('/<page>/',
                 view_func=Main.as_view('main'),
                 methods=["GET"])

トレースバックです。

Traceback (most recent call last): 
  File "demo.py", line 20, in <module> methods=["GET"]) 
  File ".../python2.6/site-packages/flask‌​/app.py", 
    line 62, in wrapper_func return f(self, *args, **kwargs) 
  File ".../python2.6/site-packages/flask‌​/app.py", 
    line 984, in add_url_rule 'existing endpoint function: %s' % endpoint)  
AssertionError: View function mapping is overwriting an existing endpoint 
    function: main

解決方法は?

ビュー名は、同じビューメソッドを指す場合でも一意である必要があります。

app.add_url_rule('/',
                 view_func=Main.as_view('main'),
                 methods = ['GET'])

app.add_url_rule('/<page>/',
                 view_func=Main.as_view('page'),
                 methods = ['GET'])