【问题标题】:disabling character escaping in Flask's url_for function在 Flask 的 url_for 函数中禁用字符转义
【发布时间】:2015-02-02 16:55:01
【问题描述】:

Flask 的url_for 方法是否有禁用自动转义的选项?因此,如果我有一个名为getUser 的端点,其路由如下:/user/<userID>,我想调用url_for('getUser', userID='%') 并让它返回/user/%。目前它将逃避 % 符号并给出/user/%25。我想这样做是因为url_for 必须在模板编译时运行,但最终 URL 是在 javscript 脚本运行时组成的。我将使用 javascript 字符串替换方法将 /user/% 转换为 /user/abcd,但我使用的替换脚本要求您使用 % 符号作为占位符。

【问题讨论】:

    标签: url routes flask escaping


    【解决方案1】:

    url_for 不支持您的用例,但假设您在 Jinja 模板中使用它,您只需添加对 replace 的调用即可删除编码:

    {{ url_for('get_user', user_id='%') | replace('%25', '%') }}
    

    或者,如果您在普通 Python 代码中传递 URL,您可以使用 urllib.parse.unquote(或 urllib.unquote,如果您仍在使用 Python 2):

    url = url_for('get_user', 'user_id'='%')
    url = unquote(url)
    

    【讨论】:

    • 提示:您不需要仅将查询参数添加到 url 的替换技巧。例如:url_for('search', q='some text').
    • 我传入的_anchorurl_for 正在被编码。 unquote 为我解决了这个问题。谢谢!
    猜你喜欢
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2013-10-08
    相关资源
    最近更新 更多