У меня проблема с тем, чтобы обернуть голову вокруг моего веб-приложения Pyramid. У меня его структура очень похожа на описанную Майклом Мерикелем здесь , за исключением того, что я использую чистый обход, чтобы найти свои взгляды. (Они объявлены сконфигурированными с context = 'path.toResource' name = 'myView'), довольно стандартная плата за проезд, согласно тому, что я могу сказать из руководства по обходу вики. У моего приложения более сложная структура URL-адресов: мои пользовательские ресурсы находятся в / users / {user_id}
, а мои проекты - в / projects / {project_id}
. Все мои ресурсы сохраняются с использованием SQLAlchemy ORM; У меня есть класс User и Project с атрибутами __ name __
и __ parent __
, а также другими атрибутами, расширяющими столбцы.
class User(Base):
id = Column(...)
__name__ = None
__parent__ = None
Class Project(Base):
id = Column(...)
__name__ = None
__parent__ = None
owner_id = Column(...ForeignKey(User.id))
owner = relationship(User,...)
У меня есть RootFactory, ProjectFactory и UserFactory, которые заполняют соответствующие атрибуты __ name __
и __ parent __
в своих вызовах __ get_item __
.
Итак, в функциях просмотра для контекста проекта я получаю экземпляр проекта в request.context. Моя проблема в том, как, черт возьми, ссылаться на соответствующий экземпляр пользователя? Я не могу работать над проектом.owner, потому что этот экземпляр User не прошел через цепочку RootFactory, поэтому его значения __ parent __
и __ name __
не установлены. Это плохо, потому что я хочу использовать request.resource_url, чтобы найти URL-адрес пользователя-владельца, поэтому я могу разместить ссылку на странице просмотра.
Какое здесь решение ТАК? Могу ли я делать все через request.root? Что, если я хочу сделать сложный запрос, который возвращает экземпляры User или Project? Есть ли какой-то CrapFactory, который я могу передать SQLAlchemy, чтобы все его экземпляры были заполнены правильно?
Мой подход совершенно неверен?
Мне кажется, у меня не было бы таких проблем, если бы я просто придерживался URL-маршрутизации ...