В Pyramid, используя обход, как создавать динамические URL? - PullRequest
4 голосов
/ 28 июня 2011

Я новичок в Pyramid и создал приложение. У меня есть база данных с таблицей категорий. Категория может быть цветной с атрибутами Red и Green, а другая категория может иметь размер с атрибутами 4 и 5. Я хотел бы иметь возможность создавать ссылки, такие как: domain.com/ndomcategory}. Допустим, у меня есть два шаблона категорий. Один - это color.mak, а другой - size.mak. Как бы получить его так, чтобы domain.com/Red или domain.com/Green отображали color.mak, а domain.com/4 или domain.com/5 отображали size.mak? После прочтения различий между URL Dispatch и Traversal кажется, что Traversal предпочтительнее, чем я хочу, даже если это можно сделать в любом случае. На самом деле я застрял в том, как добавить эти категории в мое дерево ресурсов.

1 Ответ

6 голосов
/ 28 июня 2011

Во-первых, вы хотите, чтобы ваш корневой ресурс возвращал различные типы ресурсов из __getitem__:

class Root(object):
    def __getitem__(self, key):
        if key in ['Red', 'Green']:
            return ColorCategory(key)
        elif key in ['4', '5']:
            return SizeCategory(key)

class ColorCategory(object):
    ...

class SizeCategory(object):
    ...

Затем в вашем __init__.py вы захотите настроить различные представления для вашего другого ресурса.типы (или типы контекста):

    config.add_view('myapp.views.color',
                context='myapp:resources.ColorCategory', name='',
                renderer='myapp:templates/color.mak')

    config.add_view('myapp.views.size',
                context='myapp:resources.SizeCategory', name='',
                renderer='myapp:templates/size.mak')

Способ, которым это будет работать, заключается в том, что при получении определенного URL-адреса Traversal будет искать определенный контекст и просматривать имя.Для domain.com/Red контекст будет ColorCategory('Red') (потому что это то, что возвращает ваш корневой ресурс), а имя представления будет '' (потому что путь полностью используется после поиска этого контекста).Затем пирамида будет использовать тип контекста и имя представления в качестве фильтров для поиска настроенного представления и шаблона.

...