我想以路径的形式为路径指定任意数量的参数:/arg/arg2/arg3/etc
。我无法弄清楚如何在单个函数中捕获路径下的所有这些“子路径”。我怎样才能做到这一点?
from flask import Flask
app = Flask("Example")
@app.route("/test/<command>/*")
def test(command=None, *args):
return "{0}: {1}".format(command, args)
app.run()
预期的行为是:
/test/say
- &gt; say: ()
/test/say/
- &gt; say: ()
/test/say/hello
- &gt; say: ("hello",)
/test/say/hello/to/you
- &gt; say: ("hello", "to", "you")
答案 0 :(得分:2)
我不确定你是否可以按照你想要的方式接受多个参数。
实现此目的的一种方法是定义多条路线。
@app.route('/test/<command>')
@app.route('/test/<command>/<arg1>')
@app.route('/test/<command>/<arg1>/<arg2>')
def test(command=None, arg1=None, arg2=None):
a = [arg1, arg2]
# Remove any args that are None
args = [arg for arg in a if arg is not None]
if command == "say":
return ' '.join(args)
else:
return "Unknown Command"
http://127.0.0.1/test/say/hello/
应该返回hello
http://127.0.0.1/test/say/hello/there
应该返回hello there
另一种方法是使用path
:
@app.route('/test/<command>/<path:path>')
def test(command, path):
args = path.split('/')
return " ".join(args)
如果您使用此功能,那么如果您转到http://127.0.0.1/test/say/hello/there
。
然后path
将设置为值hello/there
。这就是我们拆分它的原因。
答案 1 :(得分:2)
完全涵盖解决方案的预期行为:
@app.route("/test/<command>")
@app.route("/test/<command>/")
@app.route("/test/<command>/<path:args>")
def test(command="", args=""):
if args:
args = tuple(args.split("/"))
else:
args = tuple()
return "{0}: {1}".format(command, args)