Web2Py 视图看不到懒惰的虚拟字段



我在模型中声明了一个表和虚拟字段,如下所示:(我也尝试了两个注释掉的声明,但它们不起作用)

scan_db.define_table('Shows',
    Field('Name', unique=True),
    Field('Logo', 'upload'),
    Field('Delim', default='$'),
    format= '%(Name)s')
#scan_db.Shows.src = Field.Virtual(lambda row : URL('download', args=row.Logo))
#scan_db.Shows.src = Field.Lazy(lambda row, alt=None : URL('download', args=row.Logo))
scan_db.Shows.src = Field.Lazy(lambda row, alt=None : URL('download', args=row.Logo if alt==None else alt))

在我的控制器中,我有以下功能,我修改了download():,使其从scan_db抓取(download()与显示scan_db的图像分开测试,它可以工作。)

def showlist():
    shows = scan_db(scan_db.Shows).select()
    return dict(shows=shows)

在我看来,我有:

{{for rec in shows:}}
{{=rec.src()}}

我得到错误:<type 'exceptions.AttributeError'> 'Row' object has no attribute 'Logo'

如果我将{{=rec.src()}}更改为{{=rec}},则它会显示以下内容的列表:

<Row {'Name': 'PolarBear', 'Delim': '$', 'Logo': 'Shows.Logo.a1ef7016cfa89d1e.506f6c61722d437261702e706e67.png', 'id': 1L}>

看起来Shows.src从未被添加到我的模型中???


视图中的代码并非用于显示实际图像。我把它拿出来试图缩小实际问题的范围。我原本打算在下面的一行中使用这个图像。

<Button type="button" src="{{=rec.src()}}" onclick='window.location="{{=URL('showscans', args=rec.id}}";'>

您必须在虚拟/懒惰字段定义中使用row.tablename.fieldname语法。此外,最好在声明中包含名称:

scan_db.Shows.src = Field.Lazy('src',
    lambda row, alt=None : URL('download', args=row.Shows.Logo if alt==None else alt))

最新更新