2013-04-10 24 views
5

Io uso yapps per generare un parser per un linguaggio LaTex-ish (ad esempio per tradurre elementi come \begin{itemize} nel corrispondente <ul> -Tag) all'interno della piramide. Un comando (ad esempio \ref{SOMEID}) dovrebbe costruire un percorso tramite una chiamata di route_url (o route_path) e passare l'ID su di esso. Poiché questa chiamata avviene in profondità nel codice generato da yapps e dalla grammatica che ho definito, non vedo alcuna possibilità di passare un oggetto di richiesta ad esso.piramide: constructe route_url senza oggetto richiesta

Esiste qualche tipo di oggetto di richiesta globale? Oppure, dal momento che prevedo che non dovrei usarlo, c'è la possibilità di costruire un percorso (che dipende da un parametro) senza un oggetto di richiesta?

risposta

7

route_url richiede sia una richiesta che un registro (request.registry). Genera URL relativi alla richiesta e accede all'elenco di tutte le rotte e altre impostazioni dal registro. Quindi, tu devi generare una richiesta fittizia con i parametri che ti interessano. Per esempio:

from pyramid.request import Request 

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

Ora è possibile archiviare questa richiesta da nessuna parte, è bene andare che rappresenta tutto ciò che riguarda il vostro sito: il nome host/port (example.com:443), il prefisso vostra applicazione è montato (/prefix), lo schema URI (https).

Se è necessario inserire questo codice nel codice, potrebbe essere necessario renderlo globale o collegarlo a un determinato contesto/registro che è disponibile, ma ciò che ho mostrato è come effettuare la richiesta. richiedono.

+0

grazie mille, non conoscevo la funzione vuoto. Ho usato 'get_current_registry()' da 'pyramid.threadlocal' per ottenere il registro e quindi potrei semplicemente chiamare' route_path'. – born