2013-04-10 14 views
5

Ich benutze yapps, um einen Parser für eine LaTex-ische Sprache zu erzeugen (zB um Dinge wie \begin{itemize} in die entsprechenden <ul> -Tags zu übersetzen) innerhalb der Pyramide. Ein Befehl (d. H. \ref{SOMEID}) sollte eine Route über einen Anruf von route_url (oder route_path) aufbauen und die ID an ihn übergeben. Da dieser Aufruf tief in dem Code stattfindet, der von yapps und der von mir definierten Grammatik generiert wurde, sehe ich keine Möglichkeit, ein Anforderungsobjekt an ihn zu übergeben.Pyramide: constructe route_url ohne Anfrage Objekt

Gibt es eine Art globales Anfrageobjekt? Oder, da ich voraussehe, dass ich es nicht verwenden sollte, gibt es eine Möglichkeit, eine Route (die von einem Parameter abhängt) ohne ein Anfrageobjekt zu konstruieren?

Antwort

7

route_url erfordert sowohl eine Anfrage als auch eine Registrierung (request.registry). Es generiert URLs relativ zur Anforderung und greift auf die Liste aller Routen und anderer Einstellungen in der Registrierung zu. Daher müssen Sie eine Dummy-Anfrage mit Parametern erstellen, die Ihnen wichtig sind. Zum Beispiel:

from pyramid.request import Request 

request = Request.blank('/', base_url='https://example.com/prefix') 
request.registry = config.registry 

Jetzt können Sie diese Anforderung überall speichern kann, ist es gut, alles über Ihre Website zu gehen darstellt: der Hostname/Port (example.com:443), das Präfix Ihre Anwendung ist bei (/prefix), der uri Schema montiert (https).

Wenn Sie dies tief in Ihren Code einbinden müssen, müssen Sie es möglicherweise global machen oder an einen Kontext/eine Registrierung anhängen, die Sie verfügbar haben, aber was ich gezeigt habe ist, wie Sie die Anfrage machen benötigen.

+0

vielen dank, ich kannte die blank-funktion nicht. Ich habe 'get_current_registry()' von 'pyramid.threadlocal' verwendet, um die Registrierung zu erhalten, und konnte dann' route_path' aufrufen. – born