【问题标题】:pyramid: constructe route_url without request object金字塔:在没有请求对象的情况下构造 route_url
【发布时间】:2013-04-10 20:37:36
【问题描述】:

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

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

【问题讨论】:

    标签: pyramid web-frameworks parser-generator


    【解决方案1】:

    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 方案 (@987654326 @)。

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

    【讨论】:

    • 非常感谢,我不知道空白函数。我使用来自pyramid.threadlocalget_current_registry() 来获取注册表,然后可以调用route_path
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2018-04-05
    相关资源
    最近更新 更多