web2py 格式化视图中的列表项
web2py Formatting list items in views
剧情简介:
我想看到这样的东西:
Regular Loan Loan
Appliances Loan Loan
Monthly Dues Contribution
HELP Contribution
...但我得到的是这个:
Regular Loan <Set Loan>
Appliances Loan <Set Loan>
Monthly Dues <Set Contribution>
HELP <Set Contribution>
如何将 <Set Loan>
和 <Set Contribution>
变成 Loan
和 Contribution
?
#controller
def get_service_name(type_id=int):
type_item = db(db.service_types.id==type_id).select()
return type_item[0].type_name
def list_services():
rows = db(db.services).select()
types = []
for s in rows:
types.append(db(get_service_name(s.service_type)))
return locals()
#view
{{extend 'layout.html'}}
<h1>
Services
</h1>
{{i = -1}}
{{for service in rows:}}
{{i = i +1}}
<tr><span>{{=service.service_name}}</span><span>{{=types[i]}}</span></tr><br>
{{pass}}
编辑 1
#db.py
db.define_table('service_types',
Field('type_name', requires=[IS_NOT_EMPTY(), IS_SLUG()]),
format='%(type_name)s',
)
db.define_table('services',
Field('service_name',requires=[IS_NOT_EMPTY(),IS_NOT_IN_DB(db,'services.service_name')]),
Field('service_type','reference service_types',requires=IS_IN_DB(db,db.service_types.id,
'%(type_name)s',
error_message='not in table',
zero=None))
)
db(query)
returns 一个 DAL Set
对象。我想相反,你想要:
types.append(get_service_name(s.service_type))
但事实上,它比这更简单,因为您可以使用 recursive selects 自动从 service_types
table 中获取 DAL select(即,不需要 get_service_name
函数)。
def list_services():
rows = db(db.services).select()
return dict(rows=rows)
在视图中:
{{for service in rows:}}
<tr>
<span>{{=service.service_name}}</span>
<span>{{=service.service_type.type_name}}</span>
</tr><br>
{{pass}}
请注意,这种方法(以及您的原始代码)效率有点低,因为它会为每条记录创建一个额外的数据库 select。如果有很多记录,您可能想要进行连接:
def list_services():
rows = db(db.services.service_type == db.service_types.id).select(
db.services.service_name, db.service_types.type_name)
return dict(rows=rows)
然后在视图中:
{{for row in rows:}}
<tr>
<span>{{=row.services.service_name}}</span>
<span>{{=row.service_types.type_name}}</span>
</tr><br>
{{pass}}
上述方法只需要一个查询。
剧情简介:
我想看到这样的东西:
Regular Loan Loan
Appliances Loan Loan
Monthly Dues Contribution
HELP Contribution
...但我得到的是这个:
Regular Loan <Set Loan>
Appliances Loan <Set Loan>
Monthly Dues <Set Contribution>
HELP <Set Contribution>
如何将 <Set Loan>
和 <Set Contribution>
变成 Loan
和 Contribution
?
#controller
def get_service_name(type_id=int):
type_item = db(db.service_types.id==type_id).select()
return type_item[0].type_name
def list_services():
rows = db(db.services).select()
types = []
for s in rows:
types.append(db(get_service_name(s.service_type)))
return locals()
#view
{{extend 'layout.html'}}
<h1>
Services
</h1>
{{i = -1}}
{{for service in rows:}}
{{i = i +1}}
<tr><span>{{=service.service_name}}</span><span>{{=types[i]}}</span></tr><br>
{{pass}}
编辑 1
#db.py
db.define_table('service_types',
Field('type_name', requires=[IS_NOT_EMPTY(), IS_SLUG()]),
format='%(type_name)s',
)
db.define_table('services',
Field('service_name',requires=[IS_NOT_EMPTY(),IS_NOT_IN_DB(db,'services.service_name')]),
Field('service_type','reference service_types',requires=IS_IN_DB(db,db.service_types.id,
'%(type_name)s',
error_message='not in table',
zero=None))
)
db(query)
returns 一个 DAL Set
对象。我想相反,你想要:
types.append(get_service_name(s.service_type))
但事实上,它比这更简单,因为您可以使用 recursive selects 自动从 service_types
table 中获取 DAL select(即,不需要 get_service_name
函数)。
def list_services():
rows = db(db.services).select()
return dict(rows=rows)
在视图中:
{{for service in rows:}}
<tr>
<span>{{=service.service_name}}</span>
<span>{{=service.service_type.type_name}}</span>
</tr><br>
{{pass}}
请注意,这种方法(以及您的原始代码)效率有点低,因为它会为每条记录创建一个额外的数据库 select。如果有很多记录,您可能想要进行连接:
def list_services():
rows = db(db.services.service_type == db.service_types.id).select(
db.services.service_name, db.service_types.type_name)
return dict(rows=rows)
然后在视图中:
{{for row in rows:}}
<tr>
<span>{{=row.services.service_name}}</span>
<span>{{=row.service_types.type_name}}</span>
</tr><br>
{{pass}}
上述方法只需要一个查询。