Python ~ доступ к членам кортежа в шаблонном классе - PullRequest
3 голосов
/ 19 августа 2010

Я новичок в 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>"""

Вот проблема:

Я извлекаю данные из базы данных sqlite, используя fetchall, который возвращает список кортежей. Я могу передать этот список кортежей этому методу, изменив шаблон на% s вместо% (isbn) ... и т. Д., Однако мне нужно получить доступ к члену isbn несколько раз в шаблоне. Чтобы сделать это сейчас, я загружаю кортежи в словари и помещаю их в другой список ... затем передаю список словарей. Это кажется мне неэффективным. Мой вопрос: как бы вы переписали это так, чтобы исходный список кортежей мог быть передан в шаблон (таким образом, сохраняя шаг), при этом оставляя доступ к отдельным членам, т. Е. Item [0] или аналогичным? 1011 *

Спасибо ~

Бубнофф

Ответы [ 2 ]

0 голосов
/ 19 августа 2010

Если вы используете новое форматирование строки , возможно, будет возможно работать только с индексами ...

Но это будет ужасно расшифровать, даже если под рукой будет схема базы данных,Подход «список слов» звучит более разумно, и если вы не используете действительно часто посещаемый сервис, влияние на производительность будет не слишком плохим (это зависит от размера набора данных - но вы не получите 3k 7).- кортежи сразу, а вы?).Словари довольно эффективны в Python.Кэширование также может помочь с точки зрения производительности.

0 голосов
/ 19 августа 2010

Если вы используете 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...