Flask:带有可变参数的URL

Pau*_*aul 4 python flask

我有一个我希望以下列方式构建的URL字符串:

http://something.com/mainsite/key1/key2/key3/keyn

如何在我的URL映射中生成类似这样的内容,其中n是变量号?

我如何获得这些钥匙?

谢谢

Sea*_*ira 8

有两种方法可以做到这一点:

  1. 只需使用path路线转换器:

    @app.route("/mainsite/<path:varargs>")
    def api(varargs=None):
        # for mainsite/key1/key2/key3/keyn
        # `varargs` is a string contain the above
        varargs = varargs.split("/")
        # And now it is a list of strings
    
    Run Code Online (Sandbox Code Playgroud)
  2. 注册您自己的自定义路由转换器(有关完整详细信息,请参阅Werkzeug的文档):

    from werkzeug.routing import BaseConverter, ValidationError
    
    class PathVarArgsConverter(BaseConverter):
        """Convert the remaining path segments to a list"""
    
        def __init__(self, url_map):
            super(PathVarArgsConverter, self).__init__(url_map)
            self.regex = "(?:.*)"
    
        def to_python(self, value):
            return value.split(u"/")
    
        def to_url(self, value):
            return u"/".join(value)
    
    app.url_map.converters['varargs'] = PathVarArgsConverter
    
    Run Code Online (Sandbox Code Playgroud)

    你可以这样使用:

    @app.route("/mainsite/<varargs:args>")
    def api(args):
        # args here is the list of path segments
    
    Run Code Online (Sandbox Code Playgroud)