我无法找到有关使用数组查询字符串生成网址的任何信息,如下所示: http://www.domain.com?page[limit]=20&page[offset]=0
我试过了:
url_for(endpoint, page={'limit': 0, 'offset': 0}, _external=True)
但它生成了以下网址:
http://www.domain.com?page= {'限制':0,'抵消':0}
我目前的解决方案如下:
querystrings = []
querystrings.append('page[limit]=%d' % (limit))
querystrings.append('page[offset]=%d' % (offset))
url = '%s?%s' % (root_url, '&'.join(querystrings))
我真的希望有更好的方法!
任何帮助将不胜感激!
我最终根据我以前的解决方案创建了一个分别处理dicts的包装器:
from flask import g, url_for as _url_for
def url_for(endpoint, **values):
# fix querystring dicts
querystring_dicts = []
for key, value in list(values.items()):
if isinstance(value, dict):
for _key, _value in list(value.items()):
querystring_dicts.append('%s[%s]=%s' % (key, _key, _value))
values.pop(key)
# create url
url = _url_for(endpoint, **values)
# append querystring dicts
if querystring_dicts:
seperator = '?'
if '?' in url:
seperator = '&'
url = '%s%s%s' % (url, seperator, '&'.join(querystring_dicts))
return url
然后我像这样调用包装器:
url_for(endpoint, page={'limit': 20, 'offset': 0}, _external=True)
它将返回以下网址:
答案 0 :(得分:3)
我不相信你正在尝试的东西是开箱即用的。引擎盖url_for
依赖于Werkzeug's URL routing converters来生成和编码这些值,并且它们似乎不是字典的编码器(小一点,那就是{key: value}
语法表示,它不是一个数组)。
如果您想自己添加支持,我发现this blurb概述了自定义转换器的实现。如果你走这条路线,Flask项目甚至可能很乐意获得PR,但除非你需要使用page[limit]
而不是page_limit
,否则我只会更改它们。
url_for(endpoint, page_offset = 0, page_limit=0, _external=True)