2013-04-10 7 views
5

Я использую yapps для генерации парсера для языка LaTex-ish (например, для перевода таких вещей, как \begin{itemize} в соответствующие <ul> -Tags) внутри пирамиды. Одна команда (т. Е. \ref{SOMEID}) должна построить маршрут по вызову route_url (или route_path) и передать ему идентификатор. Поскольку этот вызов происходит глубоко в коде, который был сгенерирован yapps и грамматикой, которую я определил, я не вижу никакой возможности передать объект запроса к нему.pyramid: 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), Ури схемы (https).

Если вам нужно довести это до глубины вашего кода, вам может потребоваться сделать его глобальным или прикрепить его к некоторому контексту/реестру, который у вас есть, но я показал, как сделать запрос, который вы требуют.

+0

большое спасибо, я не знал пустую функцию. Я использовал 'get_current_registry()' из 'pyramid.threadlocal', чтобы получить реестр, а затем мог просто называть' route_path'. – born