2016-11-30 13 views
0

16進カラーコード(0xFF0000またはFF0000のようなフォーマットを使用する)のフィルタをボトルアプリケーションに追加しようとしています。16進カラーコードのボトルワイルドカードフィルタ

私はこのボトルのチュートリアルhttps://bottlepy.org/docs/dev/routing.html続く:あなたは、ルータに独自のフィルタを追加することができます

を。必要なのは、正規表現文字列、URLフラグメントをPython値に変換するための呼び出し可能メソッド、およびその逆を行う呼び出し可能関数の3つの要素を返す関数です。フィルタ機能は、唯一のパラメータとして設定文字列と呼ばれ、必要に応じてそれを解析可能性があります

しかし、毎回私は私の関数を呼び出す:

@app.route('/<color:hexa>') 
def call(color): 
.... 

私は404を受け取る:

Not found: '/0x0000FF' 

多分私は目が見えませんが、私は何が欠けているのか分かりません。ここに私のフィルタである:

def hexa_filter(config): 
    regexp = r'^(0[xX])?[a-fA-F0-9]+$' 

    def to_python(match): 
     return int(match, 0) 


    def to_url(hexNum): 
     return str(hexNum) 

    return regexp, to_python, to_url 

app.router.add_filter('hexa', hexa_filter) 

答えて

0

問題^(および最終的に$)になります。

あなたのregexはフルURLをチェックするより大きい正規表現の一部として使用することができます - だから^(時には$)大きな正規表現内の意味がありません。

from bottle import * 

app = Bottle() 

def hexa_filter(config): 
    regexp = r'(0[xX])?[a-fA-F0-9]+' 

    def to_python(match): 
     return int(match, 16) 

    def to_url(hexNum): 
     return str(hexNum) 

    return regexp, to_python, to_url 

app.router.add_filter('hexa', hexa_filter) 

@app.route('/<color:hexa>') 
def call(color): 
    return 'color: ' + str(color) 

app.run(host='localhost', port=8000) 
+0

ありがとうございます!完璧に動作します!私はおそらくもう一度もう一度やり直さなければならないでしょう! –

関連する問題