我不知道如何标题这个问题。我还简化了我的代码,以便更容易提问。假设我在 Pyramid 的 myproject.models 中有以下代码:
class Links(Base):
__tablename__ = 'links'
id = Column(Integer, primary_key=True)
link = Column(Text)
def __init__(self, link):
self.link = link
class Submissions(Base):
__tablename__ = 'submissions'
id = Column(Integer, primary_key=True)
title = Column(Text)
link_id = Column(Integer, ForeignKey('links.id'))
link = relationship(Links)
def __init__(self, title, link):
self.title = title
self.link = link
View 将非常简单:
def my_view(request):
dbsession = DBSession()
submissions = dbsession.query(Submissions)
return {'submissions':submissions}
我想使用 Chameleon 在我的页面上返回此内容:
<p tal:repeat="thing submissions">
${thing.title} ${thing.link}
</p>
但是,${thing.link} 不显示该网站的链接。
问题:
- 如何引用 thing.link 的链接?直觉上,我会输入 ${thing.link.link},但这不起作用。
- 如何引用任意子类?我希望能够从对象的子类中提取任何属性,例如 thing.link.link、thing.link.domain、thing.link.created 等。
顺便说一句,有人请告诉我一个更好的标题来提出这个问题。
最佳答案
在您的示例中,您在 .query()
之后缺少 .all()
。您可以通过执行类似的操作来检查您的 View 是否确实加载了您的提交内容
for submission in submissions:
print submission.id, submission.title
然后在加载页面时观察控制台。
然后,当您确认确实已加载它们时,您可以使用 submission.link
访问链接对象。在链接对象中,您可以使用 .link
访问链接属性。
for submission in submissions:
print submission.link.link
因此,在模板中,您可以编写 ${thing.link.link}
。
关于python - 在 Pyramids/Python/SQLAlchemy 中引用相关对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7507108/