用Flask的URL在URL中生成一个列表_

2024-05-23 15:41:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用webargs来解析来自request.args的参数,并将它们作为参数传递给烧瓶视图。我的客户机使用逗号分隔的列表来表示一个键的多个值:

/queues/generate?queue_id=4&include_ids=1,2,3

为了解析这个,我使用了棉花糖的DelimitedList字段。在

^{pr2}$

但是,如果我用Flask的url_for生成URL,它会为每个值生成重复的键:

url_for('queues.generate', queue_id=4, include_ids=[1, 2, 3])
/queues/generate?queue_id=4&include_ids=1&include_ids=2&include_ids=3

{cda>只捕获第一个字段的值。更改为List字段将再次正确捕获值。所以要么我的烧瓶网址失败,要么我的客户网址失败。在

{6}我不能用我的客户机来修改我的url。如何使url_for生成相同的样式?在


Tags: ididsurlfor参数客户机烧瓶include
1条回答
网友
1楼 · 发布于 2024-05-23 15:41:11

There's no standard for specifying multiple values for a key in a query string.Flask、浏览器和许多其他web技术使用的是您在url_for和{}中看到的“repeat key”样式。你的客户选择了不同的风格。在

如果希望url_for生成分隔样式,则需要预处理传递给url_for的值。{cd1>改为使用包装器。在

from flask import url_for as _url_for

@app.template_global()
def url_for(endpoint, **values):
    for key, value in values.items():
        if isinstance(value, (tuple, list)):
            values[key] = ','.join(value)

    return _url_for(endpoint, **values)

请记住,requests.args只理解repeat key样式,因此您必须使用webargs或其他方法解析任何传入的逗号分隔值。相反,从客户机生成repeat key样式可能更容易。在

相关问题 更多 >