【问题标题】:webapp2 routes for external links用于外部链接的 webapp2 路由
【发布时间】:2013-02-05 12:27:38
【问题描述】:

我想在我的应用程序的一个中心位置管理外部链接,这样如果它们发生变化,我只需在一个位置进行更改。

由于我已经在使用 webapp2s 路由,我想我可以使用它,并像使用其他链接一样使用 url_for。所以,尝试了以下方法:

Route('http://www.google.com', name='google', build_only=True)

但是当我渲染链接时,像这样:

uri_for('google')

它对 http:// 位进行编码,如下所示:

http%3A//www.google.com

这意味着如果你在 href 标记中使用它,你最终会得到一个像这样的相对链接:

http://localhost:8080/some/path/http%3A//www.google.com

所以,问题是:

  • webapp2s 路由甚至是为外部链接设计的吗?
  • 如果是,如何添加绝对 URL?
  • 如果没有,是否有类似的机制可以这样做?

使用 webapp2s 路由会很好,这样我就可以无缝地使用 url_for 而不必编写另一个“相同但不同”的方法。

【问题讨论】:

  • 也许这行得通:添加 _full=True 给 uri_for('google', _full=True)
  • @voscausa 感谢您的建议,但这没有用。 _full 参数强制该方法返回从当前服务器地址派生的绝对 url,这不是我需要的。我设法通过覆盖 uri_for 方法并使用 urllib.unquote() 将字符串解码回来来解决问题。我将添加一个解释的答案。谢谢

标签: google-app-engine webapp2


【解决方案1】:

我设法通过实现自己的 uri_for 方法解决了这个问题,并改用它

def uri_for(_name, _request=None, *args, **kwargs):
    uri = webapp2.uri_for(_name, _request, *args, **kwargs)
    return urllib.unquote(uri)

【讨论】:

    【解决方案2】:

    在调用 uri_for 时,您可以将 _netloc 与服务器名称放在一起,而不是 _full(如上面提到的 voscausa)。将 _netloc 强制 _full 为 True。

    http://webapp-improved.appspot.com/api/webapp2.html#uri-routing

    【讨论】:

      猜你喜欢
      • 2020-06-11
      • 1970-01-01
      • 2022-01-17
      • 2021-04-10
      • 2018-09-03
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多