【发布时间】:2016-01-21 02:34:22
【问题描述】:
使用 Compojure,除了必须格式化请求 URL 之外,还有其他方法可以重定向到定义的路由之一吗?
例如,在以下简化的defroutes 声明中:
(defroutes app-routes
; ...
(GET "/something-that-may-redirect" [query-param]
; parse `query-param` into `arg1` and `arg2` and:
(ring.util.response/redirect (format "/another-route?param1=%s¶m2=%s" arg1 arg2))
(GET "/another-route" [param1 param2] ...)
; ...
在这里,我必须格式化要重定向到的 URL(通常还处理转义),以便稍后 Compojure 本身解析该 URL 并提取 param1 和 param2 的值。
所以问题是是否有一种方法可以重定向并让 Compojure 格式化请求 URL,知道它已经有关于参数的信息?一些简单的事情:
(redirect "/another-route" arg1 arg2)
这会将 URL itlsef 格式化为:
"/another-route?param1=[value of arg1]¶m2=[value of arg2]"
附:这个想法本身肯定不是新的。其他一些 Web 框架具有类似的功能 - 例如,使用 Python 的 Flask Web 框架,可以使用url_for 从基本路径和查询参数值中创建格式良好且转义的 URL:
# for example, in Python's Flask framework
url_for('route-name', param1='value1', param2='value2')
【问题讨论】:
-
我不明白您所说的“将查询参数解析为 arg1 和 arg2”是什么意思。你把/path?query-param=x解构成x,你需要什么解析?
-
是的,我不是在谈论解析——问题是关于格式化。
-
你不能只取整个查询字符串并执行
(str "/another-route?" query-string)吗? -
嗯,这就是我的问题的重点——首先如何获取查询字符串。我当然可以自己格式化 - 这是选项之一;我的问题是 - 如何做到最好和最简单。是否有专门为此制作的东西,还是我们需要自己格式化 URL?其他一些 Web 框架具有类似的功能 - 例如,使用 Python 的 Flask Web 框架,可以使用
url_for(flask.pocoo.org/docs/0.10/quickstart/#url-building) 从基本路径和查询参数值中创建格式良好的转义 URL。 -
@dbasch 我已将上面的问题更新为更清楚 - 感谢您的提问!