2013-04-10 21 views
5

我使用yapps爲LaTex-ish語言生成解析器(例如,將諸如\begin{itemize}之類的東西翻譯爲金字塔內對應的<ul> -Tags)。一個命令(即\ref{SOMEID})應該通過呼叫route_url(或route_path)構建路由並將其傳遞給它。由於這個調用發生在由yapps和我定義的語法生成的代碼中,我沒有看到任何將請求對象傳遞給它的可能性。金字塔:constructe route_url無需請求對象

是否有某種全局請求對象?或者,由於我預見到我不應該使用它,是否有可能在沒有請求對象的情況下構建路由(取決於參數)?

回答

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)。

如果您需要深入瞭解您的代碼,您可能必須將其設置爲全局或將其附加到您可用的某個上下文/註冊表,但我已經展示的是如何向您提出請求要求。

+0

非常感謝你,我不知道空白功能。我使用'pyramid.threadlocal'中的'get_current_registry()'來獲取註冊表,然後可以調用'route_path'。 – born 2013-04-11 12:55:22