我使用yapps为LaTex-ish语言生成解析器(例如将\begin{itemize}
之类的内容转换为金字塔内的相应<ul>
- 标签)。一个命令(即\ref{SOMEID}
)应该通过调用route_url
(或route_path
)构建路由并将id传递给它。由于此调用发生在由yapps生成的代码和我定义的语法的深处,我认为没有任何可能将请求对象传递给它。
是否存在某种全局请求对象?或者,因为我预见到我不应该使用它,是否有可能在没有请求对象的情况下构造路由(取决于参数)?
答案 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
)。
如果您需要深入了解代码,可能需要将其设置为全局代码或将其附加到您可用的某些上下文/注册表中,但我所展示的是如何提出您需要的请求