我在我的模型中声明了一个表格和virtual field如下:(我已经尝试了两个已注释掉的声明,但它们不起作用)
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()
会单独测试并显示来自{{1}的图像它有效。)
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
答案 0 :(得分:1)
您必须在虚拟/惰性字段定义中使用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))