1

我正在使用 Python 中的 sqlalchemy 从我的数据库中获取数据集:

links = session.query(Link).order_by(Link.id.desc()).limit(20)

links然后我在我的视图中迭代结果:

%for link in links:
    <div class="link">
        {{link.url}}
        %if link.pdf: 
            <a href="{{link.pdf}}">[pdf]</a>
        %end
    </div>
%end

如果结果存在 pdf 文件link,我想读取 中的外部属性。pdf

我试过了 :

for index, link in enumerate(links):
    if os.path.isfile('/pdf/'+str(link.id)+'.pdf'):
        links[index].pdf = '/pdf/'+str(link.id)+'.pdf'
    else:
        links[index].pdf = None

但该pdf属性显然没有设置。

我究竟做错了什么 ?

4

2 回答 2

1

添加一个python属性应该可以完成这项工作,例如

class Link(Base):
    ...

    @property
    def pdf(self):
        path = '/pdf/%d.pdf' % self.id
        if os.path.isfile(path):
            return path
于 2013-03-05T13:58:48.383 回答
0

通常,我会创建一个包含所需信息的映射列表:

linkinfo = []
for link in links:
    pdf = '/pdf/'+str(link.id)+'.pdf'
    pdf = pdf if os.path.isfile(pdf) else None
    linkinfo.append({'url': link.url, 'pdf': pdf})

然后循环遍历linkinfo模板中的列表。

这省去了使用 SQLAlchemy 对象的麻烦,并确保您的模板获得了所有正确的数据以供显示。

于 2013-03-05T11:34:15.060 回答