2017-01-28 3 views
1

피라미드의 경로를 구축 할 수어떻게 내가, <code>pyramid_handlers</code> 라우팅을위한 <code>controller.py</code>을 사용하고

from pyramid.config import Configurator 
import blue_yellow_app.controllers.controller as albums 


def main(_, **settings): 
    config = Configurator(settings=settings) 
    config.include('pyramid_chameleon') 
    config.include('pyramid_handlers') 

    config.add_handler(
     'albums' + 'ctrl_index', '/' + 'albums', 
     handler=albums.AlbumsController, action='index') 
    config.add_handler(
     'albums' + 'ctrl_index/', '/' + 'albums' + '/', 
     handler=albums.AlbumsController, action='index') 
    config.add_handler(
     'albums' + 'ctrl', '/' + 'albums' + '/{id}', 
     handler=albums.AlbumsController) 

지금 내가 어떻게 추가 할 수 있습니다 하나의 특정 앨범에 대한 새 컨트롤러보기? 나는이 같은 새로운보기를 추가 할 을 시도했다 :

import pyramid_handlers 
from blue_yellow_app.controllers.base_controller import BaseController 
from blue_yellow_app.services.albums_service import AlbumsService 


class AlbumsController(BaseController): 
    @pyramid_handlers.action(renderer='templates/albums/index.pt') 
    def index(self): 
     # data/service access 
     all_albums = AlbumsService.get_albums() 

     # return the model 
     return {'albums': all_albums} 

    @pyramid_handlers.action(
     name='albums/{id}', 
     renderer='templates/albums/item.pt') 
    def album(self): 
     print ('test') 
     return {} 

그러나 그것은 작동하지 않습니다. 경로 albums/{id}에 대한보기를 추가하는 방법

+0

'pyramid_handlers' 패키지는 다음과 같습니다. 오랫동안 업데이트되었습니다. 어쩌면 Pyramid에서 "어떻게 X를 얻을 수 있습니까?"라는 질문을 편집하면 외부 패키지없이 일반적인 응답을 줄 수 있습니다. –

+0

우리는 또한 자신의 코스웨어에서이 소스 코드를 인식 할 때 Michael Kennedy를 데려 올 수 있습니다. https://github.com/mikeckennedy/python-for-entrepreneurs-course-demos/search?utf8=%E2%9C% 93 & q = pyramid_handlers & type = Code –

+0

Mikko : 핸들러가 얼마 동안 업데이트되지 않았습니다. 그러나 나는 이것이 정말로 잘못된 길보다 더 많은 일이 될 것이라고 생각합니다. URL 발송이 크게 변경된시기는 언제입니까? 나는 실제로 알지 못한다. 그러나 나는 년 중 중요하지 않은 것으로 의심한다. –

답변

1

이 코드는 내 Python for Entrepreneurs course처럼 보입니다. add_handler 섹션에 초점을 맞추자. 함수의 일반적인 형식은 다음과 같습니다

config.add_handler(NAME, URL, handler=HANDLER, action=OPTIONAL_ACTION_METHOD) 

당신은 액션 메소드 def album(self)에 URL /albums/rock-classics를 매핑 할. add_handler에서 당신이 전화 :

당신은 라우팅 값이나 함수 호출에 하나 액션을 지정하지 않은 :

config.add_handler(
    'albumsctrl', '/' + 'albums' + '/{id}', 
    handler=albums.AlbumsController) 

문제는 두 가지입니다. 당신이 있어야합니다

# via add_handler, url: /albums/rock-classics 
config.add_handler(
    'albumsctrl', '/albums/{id}', 
    handler=albums.AlbumsController, action=album) 

또는

# via route, url: /albums/album/rock-classics 
config.add_handler(
    'albumsctrl', '/albums/{action}/{id}', 
    handler=albums.AlbumsController) 

두 번째 문제는 액션 메소드 자체

@pyramid_handlers.action(
    name='albums/{id}', <----- PROBLEM: this is not a valid action name 
    renderer='templates/albums/item.pt') 
def album(self): 
    print ('test') 
    return {} 

그것은 중복 된 이름 = '앨범'하거나 하나가 이름이어야합니다 당신의 이름입니다 방법의 :

@pyramid_handlers.action(renderer='templates/albums/item.pt') 
def album(self): 
    print ('test') 
    return {} 
관련 문제