金字塔:没有请求对象的constructe route_url

时间:2013-04-10 20:37:37

标签: pyramid web-frameworks parser-generator

我使用yapps为LaTex-ish语言生成解析器(例如将\begin{itemize}之类的内容转换为金字塔内的相应<ul> - 标签)。一个命令(即\ref{SOMEID})应该通过调用route_url(或route_path)构建路由并将id传递给它。由于此调用发生在由yapps生成的代码和我定义的语法的深处,我认为没有任何可能将请求对象传递给它。

是否存在某种全局请求对象?或者,因为我预见到我不应该使用它,是否有可能在没有请求对象的情况下构造路由(取决于参数)?

1 个答案:

答案 0 :(得分:7)

route_url需要请求和注册表(request.registry)。它生成相对于请求的URL,并从注册表访问所有路由和其他设置的列表。因此,必须生成包含您关注的参数的虚拟请求。例如:

from pyramid.request import Request

request = Request.blank('/', base_url='https://example.com/prefix')
request.registry = config.registry

现在您可以将此请求存储在任何位置,最好代表您网站的所有内容:主机名/端口(example.com:443),应用程序安装在(/prefix)的前缀,uri方案(https)。

如果您需要深入了解代码,可能需要将其设置为全局代码或将其附加到您可用的某些上下文/注册表中,但我所展示的是如何提出您需要的请求