2014-08-30 59 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