Python 仅传递非';t烧瓶'无;s url_用于

Python 仅传递非';t烧瓶'无;s url_用于,python,flask,Python,Flask,我目前正在尝试使用关键字和form GET方法在Flask中设置搜索 要处理分页,我必须将过滤器的所有关键字传递到下一页或最后一页的url\u。然而,有时这些关键字并不需要,只是把url栏弄得乱七八糟 {url_for(request.endpoint,page=pagination.next_num,searchTerm=searchTerm,blendLicense=blendLicense,renderEngine=renderEngine,blendVersion=blendVersio

我目前正在尝试使用关键字和form GET方法在Flask中设置搜索

要处理分页,我必须将过滤器的所有关键字传递到下一页或最后一页的
url\u。然而,有时这些关键字并不需要,只是把url栏弄得乱七八糟

{url_for(request.endpoint,page=pagination.next_num,searchTerm=searchTerm,blendLicense=blendLicense,renderEngine=renderEngine,blendVersion=blendVersion)}

有没有办法只传递那些不是
None
的关键字,这样就不会把URL栏弄得乱七八糟?如果只有一个关键字要检查,我会使用
If-else
块,但有许多关键字要检查。

执行如下调用:

kwargs = dict(searchTerm=searchTerm,
              blendLicense=blendLicense,
              renderEngine=renderEngine,
              blenderVersion=blenderVersion)

url_for(request.endpoint, page=pagination.next_num, **kwargs)
这与您问题中的代码相同。 但是现在您可以方便地过滤掉默认值,例如
None

def filter_default(kwargs):
    return {k: v
            for k, v in kwargs.items()
            if v}
(或者,如果v不是None,则使用
如果可能存在空字符串之类的值。)

在传入词典之前,将该筛选函数应用于词典

编辑


url\u for
已经忽略了
None
的关键字。你不需要在上面做任何事情

@app.route(“/search”)
def search():
...
{{ url_for(request.endpoint,
           page=pagination.next_num,
           **filter_default(dict(searchTerm=searchTerm,
                                 blendLicense=blendLicense,
                                 renderEngine=renderEngine,
                                 blenderVersion=blenderVersion))) }}
url_for("search", name="Flask", page=2))
"/search?name=Flask&page=2"
url_for("search", name="Flask", page=None))
"/search?name=Flask"