Usted puede conectar en los convertidores personalizados que responden a las expresiones arbitrarias: Custom Converter
from random import randrange
from werkzeug.routing import Rule, Map, BaseConverter, ValidationError
class BooleanConverter(BaseConverter):
def __init__(self, url_map, randomify=False):
super(BooleanConverter, self).__init__(url_map)
self.randomify = randomify
self.regex = '(?:yes|no|maybe)'
def to_python(self, value):
if value == 'maybe':
if self.randomify:
return not randrange(2)
raise ValidationError()
return value == 'yes'
def to_url(self, value):
return value and 'yes' or 'no'
url_map = Map([
Rule('/vote/<bool:werkzeug_rocks>', endpoint='vote'),
Rule('/vote/<bool(randomify=True):foo>', endpoint='foo')
], converters={'bool': BooleanConverter})
+1 para agregar un ejemplo útil! –
Pero, ¿significa esto que las expresiones regulares se compilan o se evalúan sobre la marcha? –
Parece que la expresión regular se evaluará directamente en el tiempo de ejecución. Esto no debería ser problemático para aplicaciones más pequeñas (o aplicaciones que reutilizan varias veces regex, creo) ya que los últimos patrones regex se almacenan compilados en la memoria. – bbenne10