2012-04-28 3 views
3

궁금한 점은 :
라우트 구성 패턴 내에서 기본값을 제공 할 수 있습니까?
예 : 데이터 세트에 바인딩 된 (잠재적으로 큰) 파일 목록을 보여주는보기가 있습니다. 각 페이지가 100 개의 파일을 보여주는 페이지에서보기를 분할하려고합니다. url 패턴의 페이지 부분이 생략되면 첫 번째 페이지가 표시되기를 원합니다.
그래서 같은 것을 가지고 싶습니다피라미드 : 경로 패턴의 기본값

config.add_route('show_files', '/show_files/{datasetid}/{page=1}) 

은 즉, 또는 합리적인 노력으로 행할 수있는 대안? 피라미드 문서의 경로 구문 설명에서 아무 것도 발견하지 못했습니다.

고맙습니다.

답변

2

아니요, 나머지 일치를 사용하여 페이지를 선택적으로 설정 한 다음 실제 논리에 표시 할 페이지를 결정할 수 있습니다.

http://readthedocs.org/docs/pyramid/en/master/narr/urldispatch.html

다른 옵션은 단순히 페이지의 URL의 GET 변수가 아닌 일부가 될 것입니다.

+0

감사합니다. 남은 경기는 내가 놓친 것입니다. – Chris

12

당신은 아마도 this answer으로 만족하고 있지만 다른 옵션은 동일한보기로 발송하는 여러 경로를 사용하는 것입니다.

config.add_route('show_files', '/show_files/{datasetid}') 
config.add_route('show_files:page', '/show_files/{datasetid}/{page}') 

@view_config(route_name='show_files') 
@view_config(route_name='show_files:page') 
def show_files_view(request): 
    page = request.matchdict.get('page', '1') 
1

위로 설정하려면 (해키) custom predicate을 사용하는 것입니다. matchdict 변경은 명시 적으로 허용됩니다.

def matchdict_default(**kw): 
    def f(info, request): 
     for k, v in kw.iteritems(): 
      info['match'].setdefault(k, v) 
     return True 
    return f 

config.add_route(
    'show_files', 
    '/show_files/{datasetid}/{page}') 
config.add_route(
    'show_files', 
    '/show_files/{datasetid}', 
    custom_predicates=(matchdict_default(page=1),)) 
0

나는 Thomas Jungs의 예를 사용할 수 없었습니다. iteritems()를 사용하지 않고 키를 반복하여 Thomas Jung의 예제를 사용할 수있었습니다.

def matchdict_default(**kw): 
def f(info, request): 
    for k in kw: 
     info['match'].setdefault(k, kw[k]) 
    return True 
return f 

config.add_route(
'show_files', 
'/show_files/{datasetid}/{page}') 
config.add_route(
'show_files', 
'/show_files/{datasetid}', 
custom_predicates=(matchdict_default(page=1),))` 

now both of the following urls resolve to the page value, and, urls 
can be created without needing to include a query 
parameter 

/show_files/an_id/ 
/show_files/an_id/?page=1