Web2Py视图无法看到Lazy Virtual Field

时间:2014-08-30 21:11:30

标签: python html web2py

我在我的模型中声明了一个表格和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

1 个答案:

答案 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))