我是Python新手 - 预先警告!
我有一个模板类,它以列表作为参数,并将列表成员应用于模板。这是第一堂课:
class ListTemplate:
def __init__(self, input_list=[]):
self.input_list = input_list
def __str__(self):
return "\n".join([self._template % x for x in self.input_list])
这是模板代码/类:
class HTML_Template(ListTemplate):
_template = """
<li>
<table width="100%%" border="0">
<tr>
<td>Title: %(title)s</td>
<td>Link: %(isbn)s</td>
</tr>
<tr>
<td>Author: %(author)s</td>
<td>Date: %(pub_date)s</td>
</tr>
<tr>
<td>Summary: %(isbn)s</td>
<td>Description: %(descr)s</td>
</tr>
</table>
<hr>
</li>"""
问题在于:
我使用fetchall从sqlite数据库中提取数据,这会返回一个元组列表。我可以通过将模板更改为%s而不是%(isbn)等来将此元组列表传递给此方法,但是,我需要在模板中多次访问isbn成员。为了做到这一点,我将元组加载到字典中并将它们推入另一个列表...然后传递字典列表。这让我觉得效率低下。我的问题是:你如何重写这个,以便原始的元组列表可以传递给模板(因此,保存一个步骤),同时仍然允许通过ie。,item [0]或类似的方式访问各个成员?< / p>
谢谢〜
Bubnoff
答案 0 :(得分:0)
如果您使用的是Python 2.6或更高版本,则可以使用format
字符串方法而不是%
运算符。这允许您指定给定参数的索引:
>>> template = 'First value: {0}, Second value: {1}, First again: {0}'
>>> values = (123, 456)
>>> template.format(*values)
'First value: 123, Second value: 456, First again: 123'
答案 1 :(得分:0)
如果您使用new string formatting,则可以仅对索引进行操作......
但即使手头有数据库方案,破解也是可怕的。 dict列表方法听起来更加理智,除非你经常访问一个经常访问的服务,否则性能影响不会太差(这取决于数据集的大小 - 但是你没有得到3k 7 - 一下子,你呢?)。字典在Python中相当有效。缓存也可以帮助提高性能。