В Pyramid, используя обход, как создавать динамические URL-адреса?

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


person jchysk    schedule 27.06.2011    source источник


Ответы (1)


Во-первых, вам нужно, чтобы ваш корневой ресурс возвращал разные типы ресурсов из __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') (поскольку это то, что возвращает ваш корневой ресурс), а имя представления будет '' (поскольку путь полностью используется после поиска этого контекста). Затем пирамида будет использовать тип контекста и имя представления в качестве фильтров для поиска настроенного представления и шаблона.

person Mu Mind    schedule 28.06.2011