我正在尝试为我的瓶子应用程序添加十六进制颜色代码的过滤器(应采用类似:0xFF0000或FF0000的格式)。
我按照这个瓶子教程https://bottlepy.org/docs/dev/routing.html:
您可以将自己的过滤器添加到路由器。你需要的只是一个返回三个元素的函数:一个正则表达式字符串,一个用于将URL片段转换为python值的callable,以及一个相反的callable。使用配置字符串作为唯一参数调用过滤器函数,并可根据需要对其进行解析:
但每当我打电话给我的职能时:
@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 :(得分:0)
问题导致^
(最终$
)。
你的正则表达式可以用作检查完整网址的更大正则表达式的一部分 - 所以^
(有时$
)在更大的正则表达式中是没有意义的。
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)