2014-08-30 62 views
0

我声明了一个表,并virtual field在我的模型如下:(我试过两个注释掉的声明,以及和他们不工作)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}}";'> 

回答

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)) 
+0

完全忘记提及我从文档中获得了错误的语法。我在哪里正确报告或解决这个问题?这里的例子:http://www.web2py.com/books/default/chapter/35/06/the-database-abstraction-layer#New_style_virtual_fields_%28experimental%29有>>> >>> db.item.total_price = Field。 Lazy(lambda row,discount = 0.0:row.unit_price * row.quantity *(1.0-discount/100))' – 2014-09-03 02:06:05

+0

不幸的是,该书的该版本有时会出现在搜索结果中。这是一个不完整的中文翻译,是当前英文版本的一个版本。您应该使用http://web2py.com/book,它显示此案例的正确语法。 – Anthony 2014-09-03 04:03:01

+0

Gah !!!我打印了所有东西,然后绑定它......用手 – 2014-09-03 04:04:23