Различия между версиями 8 и 9
Версия 8 от 2010-07-13 10:15:35
Размер: 5965
Редактор: RostislavDzinko
Комментарий:
Версия 9 от 2010-07-13 11:32:34
Размер: 6516
Редактор: RostislavDzinko
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 62: Строка 62:
Now that we have some sample data to work with, we can now create a table. Since tables are UI components, they require both a context and a request. These are taken as arguments to the Table class’s constructor. Теперь, когда у нас есть тестовые данные, с которыми можно работать, мы может создать таблицу. Так как таблицы - компоненты пользовательского интерфейса, они требуют и контекста и запроса (request). Они передаются как аргументы конструктору класса '''Table'''.
Строка 71: Строка 71:
Once the table has been instantiated, we can update and render it. Since we have not specified any columns for the table to render, the table just renders to an empty string: Когда таблица создана, мы можем ее обновлять и отрисовывать. Так как мы не указали столбцы таблицы, которые нужно отрисовать, таблица отрисуется как пустая строка:
Строка 79: Строка 79:
We should also note that the Table class is an implementation of the ITable interface. It will be more interesting to look at what ITable provides when we have some columns. Также стоит заметить, что класс '''Table''' - реализация интерфейса '''ITable'''. Намного интереснее взглянуть, что предоставляет '''ITable''', когда у нас есть несколько столбцов:
Строка 87: Строка 87:

'''Перевод: Ростислав Дзинько'''

z3c.table - продвинутые таблицы

Z3C Table

Цель, которую преследует пакет z3c.table - предложить модульную библиотеку для отрисовки таблиц. Мы используем шаблон "контент провайдер" с колонками, реализованными как адаптеры. Такой подход - мощная базовая концепция.

Важные требования

  • разделение реализации в обновлении частей отрисовки. Такой подход позволяет манипулировать данными после обновления, и перед отрисовкой.
  • мы можем использовать шаблоны страниц, если потребуется, но, по умолчанию, все делается в Python.
  • мы может отрисовывать порционную навигацию отдельно от самой таблицы.

Никаких скинов

Этот пакет не предоставляет никаких шаблонов и скинов. В любом случае, когда вам нужно отрисовать красивую таблицу, вам придется писать свой собственный скин или шаблон. Отсутствие шаблонов и скинов позволяет удостоверится, что z3c.table имеет очень мало зависимостей, а поэтому легко поддается повторному использованию.

Заметка

Как вы, вероятно, уже знаете, перед тем, как выполняется сортировка по столбцам при порционном отображении данных таблицы, должна быть выполнена сортировка полного набора данных. При большом наборе данных это ведет к проблемам с быстродействием. При работе с большими объемами данных мы рекомендуем не совмещать порционное отображение с сортировкой по столбцам, либо, если нужно, предоставлять "умный" механизм кеширования данных для хранения отсортированных последовательностей.

Пример установки данных

Таблицы часто используются для отображения нормализованных порций данных. Например, нам необходимо отобразить информацию о файлах в папке. Каждый файл имеет заголовок, размер и тип. Наша таблица должна иметь строку для каждого файла и столбец для этих трех полей данных (заголовка, размера, и типа). Контекстом таблицы всегда является структура данных, по которой можно выполнить итерацию, при этом каждый элемент последовательности соответствует строке таблицы. Давайте создадим папку, которую мы сможем использовать как контекст:

   1 >>> from zope.app.container import btree
   2 >>> class Folder(btree.BTreeContainer):
   3 ...     """Sample folder."""
   4 ...     __name__ = u'folder'
   5 >>> folder = Folder()

XXX: не уверен, куда нам нужно положить эту папку. Также нам можно и не давать значение атрибуту _ _name_ _. Нам не нужно куда либо помещать ее. Давайте установим родительский элемент для папки:

   1 >>> root['folder'] = folder

Теперь создадим простой объект File для наполнения созданной нами папки.

   1 >>> class File(object):
   2 ...     """Sample file."""
   3 ...     def __init__(self, title, size, type=None):
   4 ...         self.title = title
   5 ...         self.number = size
   6 ...         self.type = type

Теперь давайте наполним созданную папку файлами.

   1 >>> folder[u'first'] = File('First', 1)
   2 >>> folder[u'second'] = File('Second', 2)
   3 >>> folder[u'third'] = File('Third', 3)

Создание таблиц

Теперь, когда у нас есть тестовые данные, с которыми можно работать, мы может создать таблицу. Так как таблицы - компоненты пользовательского интерфейса, они требуют и контекста и запроса (request). Они передаются как аргументы конструктору класса Table.

   1 >>> from zope.publisher.browser import TestRequest
   2 >>> from z3c.table import table
   3 >>> request = TestRequest()
   4 >>> plainTable = table.Table(folder, request)

Когда таблица создана, мы можем ее обновлять и отрисовывать. Так как мы не указали столбцы таблицы, которые нужно отрисовать, таблица отрисуется как пустая строка:

   1 >>> plainTable.update()
   2 >>> plainTable.render()
   3 u''

Также стоит заметить, что класс Table - реализация интерфейса ITable. Намного интереснее взглянуть, что предоставляет ITable, когда у нас есть несколько столбцов:

   1 >>> from z3c.table import interfaces
   2 >>> from zope.interface.verify import verifyObject
   3 >>> verifyObject(interfaces.ITable, plainTable)
   4 True

Перевод: Ростислав Дзинько

Пакеты/ZopePlone/Z3cTable (последним исправлял пользователь RostislavDzinko 2010-07-14 12:32:54)