2016-07-19 6 views
-1

清潔な解決策へのご意見をお待ちしております。私は、既存のアプリケーションにいくつかの静的ファイルを追加しようとしていますAssertionError:ビュー関数マッピングが既存のエンドポイント関数を上書きしています:EMPTY?

、他のファイルと静的フォルダがすでに設定されています。私はリストに基づいていくつかのルートを定義したい、目標は簡単にファイルを追加できるようにすることです。

問題は、私が代わりに作業プログラムのこれを受け、「エンドポイント機能は、」適切に検出されないということです。

出力:

{'/file1.js': <function func at 0x10aedfed8>, '/file2.js': <function func at 0x10aeea050>} 
{'/file1.js': <function func at 0x10aedfed8>, '/file2.js': <function func at 0x10aeea050>} 
Traceback (most recent call last): 
    File "flaskweird.py", line 29, in <module> 
    app.add_url_rule(d, '', app.serv_deps[d]) 
    File "/Library/Python/2.7/site-packages/flask/app.py", line 62, in wrapper_func 
    return f(self, *args, **kwargs) 
    File "/Library/Python/2.7/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: 

コード:奉仕する

from flask import Flask 
app = Flask(__name__) 

def gen_serv_dep(path): 
    fp = 'ui' + path # path always starts with/
    with open(fp) as f: 
     content = f.read() 
    if path.endswith('.css'): 
     mime = "text/css" 
    elif path.endswith('.js'): 
     mime = "text/javascript" 
    else: 
     mime = "text" 
    def func(): 
     #this.__name__ = path # doesn't change anything 
     return Response(response=content, status=200, mimetype=mime) 
    return func 

deps = ['/file1.js', '/file2.js'] 
app.serv_deps = {} 
for d in deps: 
    app.serv_deps[d] = gen_serv_dep(d) 
for d in deps: 
    print(app.serv_deps) 
app.add_url_rule(d, '', app.serv_deps[d]) 

@app.route('/') 
def hello_world(): 
    return 'Hello, World!' 

サンプルファイル:

mkdir ui 
echo "test1" > ui/file1.js 
echo "test2" > ui/file2.js 

フラスコ== 0.10.1

+0

は、使用して検討しているフラスコの[ "青写真"](http://flask.pocoo.org/それは仕事ができるように静的ファイルの追加ソースを紹介するドキュメント/ 0.11 /青写真/)? – jonrsharpe

+0

オム...おかげで、見える、私は。たぶん上書き関数名が空である理由を任意のアイデアを試してみましょう? – thomas

+0

あなたは空を通過したので文字列をforループの 'add_url_rule'に複数回指定してください毎回一意の名前を指定してください – davidism

答えて

0

「あなたは空を通過したので文字列をにするforループで複数回毎回ユニークな名前を選択してください。」 - davidism

をこれは細かい

for d in deps: 
    app.add_url_rule(d, d, app.serv_deps[d]) 

おかげで動作します

関連する問題