2013-04-10 9 views
5

私は、LaTex-ish言語用のパーサーを生成するためにyappsを使用します(例えば\begin{itemize}のようなものを対応する<ul> -Tagsに変換するために)。 1つのコマンド(\ref{SOMEID})は、route_url(またはroute_path)というコールを経由してルートを構築し、それにidを渡す必要があります。この呼び出しはyappsによって生成されたコードと、私が定義した文法の深いところで起こるので、要求オブジェクトを渡すことはできません。ピラミッド:リクエストオブジェクトのない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

関連する問題