2013-04-10 3 views
5

필자는 피라미드 내의 LaTex-ish 언어 구문 분석기 (예 : \begin{itemize}<ul> -Tags로 변환)와 같은 구문 분석기를 생성하는 데 yapps를 사용합니다. 하나의 명령 (예 : \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