Да там все очень просто, если разобраться. Лучше всего конечно почитать официальную документацию, но для того, чтобы было понятно дальше на пальцах можно сказать так:
При траверсинге path_info разбивается на части между слешами, по которым и происходит поиск вызываемого ресурса и вызываемой вьюшки. Например, если запрашивается путь “/a/b/c/”, то при траверсинге его пирамида разобъет на части и начнет поиск ресурса начиная с корневого контейнера (создается фабрикой, которая устанавливается при конфигурации предложения) последовательно по очень простому алгоритму, который можно представить так:
resource = root
for part in ["a", "b", "c"]:
try:
resource = resource[part]
except KeyError:
# Следующий ресурс не найден - тогда это должна быть именованная вьюха, причем последняя в списке
# иначе выбросится исключение NotFound
# Ресурс найден - должна вызваться дефолтная вьюха
Это позволяет делать различные ухищрения, например для локализации по вашему способу можно сделать так:
class Root(dict):
"""
Это реальный корневой элемент системы
"""
def __init__(self):
super(Root, self).__init__(blogs=BlogContainer(), news=NewsContainer(), users=UserContainer())
class Localizer(obj):
"""
Это хитрый адаптер для поддержки локализации
"""
def __init__(self, request):
self.request = request
def __getitem__(self, key):
"""
Вот здесь реальная работа с локалью
"""
if key in ['en', 'ru', 'fr', 'it', 'de']:
request._LOCALE_ = key
return Root()
request._LOCALE_ = 'en'
return Root()[key]
def get_root(request):
"""
Это фабрика для создания корневого ресурса
"""
return Localizer(request)