Обычно это решается с помощью Object Dispatch. Вы также можете создать вложенные контроллеры, чтобы справиться с этим. Преимущество состоит в том, что вы можете следовать основному принципу ООП, а именно инкапсуляции, поскольку вы группируете все функции, относящиеся только к отелям, как правило, в контроллере отеля (например, добавляя новый)
Еще одним преимуществом является то, что вам не нужно проверять, например, что установлено после / hotels /. Он будет отправлен новому контроллеру только в том случае, если осталось что-то отправить, т. Е. Текущий контроллер не смог обработать весь запрос.
Это на самом деле не относится к определенной среде, но полностью реализовано в Pylons и Turbogears 2.0. (Для более подробной информации вы можете обратиться к http://turbogears.org/2.0/docs/main/TGControllers.html#the-lookup-method)
class HotelController(Controller):
""" Controller to handle requests to Hotels """
def index(self):
""" Handle the index page here """
pass
def addNewHotel(self):
""" Register a new hotel here """
pass
def lookup(self, state_name, *remainder):
""" Read the state, create a new StateController and dispatch """
state_dispatch = StateController(state_name)
return state_dispatch, remainder
class StateController(object):
""" Controller used to dispatch """
def __init__(self, state_name):
# do your work on the state here
pass
def create(self, state_name):
""" Create a new state here """
def lookup(self, city_name, *remainder):
""" keep on dispatching to other controllers """
city_dispatch = CityController(city_name)
return city_dispatch, remainder