Я новичок в 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-адресов и обходом кажется, что обход был бы предпочтительнее для того, что я хочу, даже если это можно было бы сделать любым способом. На чем я действительно застрял, так это на том, как добавить эти категории в мое дерево ресурсов.
В Pyramid, используя обход, как создавать динамические URL-адреса?
Ответы (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