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

bor*_*orn 5 web-frameworks parser-generator pyramid

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

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

Mic*_*kel 7

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

from pyramid.request import Request

request = Request.blank('/', base_url='https://example.com/prefix')
request.registry = config.registry
Run Code Online (Sandbox Code Playgroud)

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

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