Welcome, guest | Sign In | My Account | Store | Cart

Notice! PyPM is being replaced with the ActiveState Platform, which enhances PyPM’s build and deploy capabilities. Create your free Platform account to download ActivePython or customize Python with the packages you require and get automatic updates.

pypm install ftw.tabbedview

How to install ftw.tabbedview

  1. Download and install ActivePython
  2. Open Command Prompt
  3. Type pypm install ftw.tabbedview
 Python 2.7Python 3.2Python 3.3
Windows (32-bit)
Windows (64-bit)
Mac OS X (10.5+)
Linux (32-bit)
Linux (64-bit)
3.3.7 Available View build log
Lastest release
version 3.3.7 on Jan 9th, 2014


This package provides a generic view with multiple tabs for plone. It provides a generic base tab for listing contents in a table, based on ftw.table.


  • Generic tabbed view
  • Tabs are registered through FTI actions
  • Base view for listing tabs
  • Listing tabs are filterable
  • Perform configurable actions on listed items
  • ftw.table's Ext JS support works also in listing tables
  • Fallback tables
  • Drag'n drop multiple file upload functionality (using quickupload plugin)


Default table implementation

  • Add ftw.tabbedview to your buildout (or as dependency to a custom egg):
parts =

eggs +=
  • Install default profile in portal_setup.

Ext JS table implementation

  • Add ftw.tabbedview to your buildout (or as dependency to a custom egg), using the extjs extras require:
parts =

eggs +=
  • Install extjs profile in portal_setup.
Quickupload plugin implementation

The quickupload plugin integrates the collective.quickupload packages in to the tabbedview.

  • Add ftw.tabbedview to your buildout (or as dependency to a custom egg), using the quickupload extras require:
parts =

eggs +=
  • Install quickupload profile in portal_setup.
  • For activating the quickupload plugin on a context, make sure the context provides the ITabbedviewUploadable Interface.

We use the package example.conference``_ as example for showing how to use ``ftw.tabbedview.

  • Use the @@tabbed_view on any container.

  • Define actions on the content type FTI (Example: profiles/default/types/example.conference.program.xml):

    <?xml version="1.0"?>
    <object name="example.conference.program" meta_type="Dexterity FTI"
            i18n:domain="example.conference" xmlns:i18n="http://xml.zope.org/namespaces/i18n">
      <property name="default_view">tabbed_view</property>
      <property name="view_methods">
          <element value="tabbed_view"/>
      <action title="Sessions" action_id="sessions" category="tabbedview-tabs"
              condition_expr="" url_expr="string:${object_url}?view=sessions"
          <permission value="View"/>
  • Create the "tab" view (Example: browser/tabs.py):

    >>> from ftw.tabbedview.browser.listing import CatalogListingView
    >>> from ftw.table import helper
    >>> from example.conference import _
    >>> class SessionsTab(CatalogListingView):
    ...     """A tabbed-view tab listing sessions on a program.
    ...     """
    ...     types = ['example.conference.session']
    ...     sort_on = 'sortable_title'
    ...     show_selects = False
    ...     columns = (
    ...         {'column': 'Title',
    ...          'sort_index': 'sortable_title',
    ...          'column_title': _(u'Title'),
    ...          'helper': helper.linked},
    ...         {'column': 'Track',
    ...          'column_title': _(u"Track")},
    ...         )
  • Register the view using ZCML, be sure to name it tabbedview_view-${action id} (Example: browser/configure.zcml):


Alternative listing sources

It is possible to use alternative sources for listing tabs. The tables are generated using ftw.table and the tab is a ftw.table.interfaces.ITableSourceConfig, which allows ftw.table to find an appropriate source. Subclassing ITableSourceConfig and registering a custom ITableSource multi adapter makes it possible to use alternative data sources such as sqlalchemy or structured python data (local roles for instance). Take a look at the ftw.table documentation for more details.


Screenshot of a example tabbed view using the default table implementation:


Screenshot of the same listing using the extjs table implementation:



This package is released under GPL Version 2. Be aware, that when using the package with the extjs extras, it will install Ext JS, which has different license policies. See http://www.sencha.com/products/extjs/license/ for details.


3.3.7 (2013-08-26)
  • Move table_options initalization from __call__ to __init__ in listing.py. Otherwise the update method does not work without calling the view first. [mathias.leimgruber]
  • Fix deprecated quickupload interface import. [jone]
3.3.6 (2013-07-18)
  • Filter field: add placeholder. [jone]
  • Fixed markup in tabbedview buttons and added a class to identify buttons. [Julian Infanger]
  • Mark tabbedview header with disabledSearchBox class if the searchbox is disabled. [Julian Infanger]
3.3.5 (2013-04-17)
  • Use removeAttr (jQuery 1.7.x). [mathias.leimgruber]
  • Fix reset table configuration action. [mathias.leimgruber]
  • Use Batch.fromPagenumber. [mathias.leimgruber]
3.3.4 (2013-01-25)
  • Add INoExtJS marker interface disabling extjs when provided by the tabbview and the tab [mathias.leimgruber]
3.3.3 (2013-01-21)
  • Add default dynamic batching form to batching template. #11 [jone]
  • Fix javascript order in ExtJS profile. [jone]
  • Fix IE7 element positioning issue by force repainting. [jone]
  • Do not hide the right portlet column. [Julian Infanger]
  • Fix failing test introduced by the "anonymous access" change. Also test extjs configuration specifically anonymous. [jone]
3.3.2 (2012-10-26)
  • Basic support for using the tabbed view anonymously. ExtJS is not supported and automatically disabled for anonymous users. [jone]
  • Adjust javscripts: Use $ instead of deprecated jq. [phgross]
  • Added condition for not showing uploadbox if text is dragged on the website. [Julian Infanger, jone]
  • Use first tabbedview by default when accessing tabbed view anonymously. [jone]
3.3.1 (2012-10-16)
  • Cleanup readme [mathias.leimgruber]
3.3 (2012-10-16)
  • Load upload function only on tabbedview. [mathias.leimgruber]
  • Tabbedview: do not flush all parameters when re-sorting, but only the relevant ones. This allows to keep additional parameters (e.g. filters) while sorting. [jone]
  • Reset view_name param before changing a tab. [mathias.leimgruber]
  • Added min_height to tabbedview-body. Grey-out the tabbedview-body while loading a new tab. [Julian Infanger]
  • Fix default tab key storage, so that it includes the user id. [jone]
  • Adjust french translation. [philippegross]
  • Add English translations. [jone]
  • Add functionality for setting the default tab of a tabbed view. [jone]
  • Change dictstorage to adapt IBrowserView instead of IListingView. [jone]
  • Add a per-tab menu for actions such as resetting the extjs table state. [jone]
  • Filtering: do not reload when moving cursor in the filter box. [jone]
  • Keep height while loading tab. This reduces content height flickering. [jone]
  • Quickupload: Limit simultaneous uploads to 1 (sequential) to avoid DB conflicts [lgraf]
  • Prevent default in js-action for ViewChooser-links. [Julian Infanger]
  • Fix batching expression for compatibility with plone4.2rc2 and newer. [jone]
  • Fixed definition of ITabbedView.quickupload_addable_types schema.List fields always need a value_type [lukasg]
3.2.6 (2012-05-24)
  • Make quickupload work bhind a proxy (url in value of hidden field will no be rewritten.) [mathias.leimgruber]
3.2.5 (2012-05-24)
  • Fix upload js for IE8. [mathias.leimgruber]
3.2.4 (2012-05-22)
  • Bugfix: fix sorting in grid state when it is wrong. [jone]
3.2.3 (2012-05-09)
  • Use same markup in batching like plone. [Julian Infanger]
  • Add meta:provides ftw.tabbedview3 for zcml:conditions. [jone]
  • Setting 'X-Theme-Disabled' header in ListingView response for HTML fragment [lgraf]
  • Added 'ajax_load' parameter to listing request. [lgraf]
  • Setting correct Content-Type header for JSON response from ListingView. [lgraf]
3.2.2 (2012-04-23)
  • Added CSS classes to brackets, which indicates the current page in batching.pt [mathias.leimgruber]
3.2.1 (2012-04-05)
  • Replace some $ by jq in tabbedview.js. [mathias.leimgruber]
3.2 (2012-04-02)
  • Bugfix in check for quickupload is available. [mathias.leimgruber]
  • Added Quickupload plugin, wich provides drag'n drop multiple fileupload functionality. [phgross]
3.1.5 (2012-03-28)
  • Enable extjs in portal_registry with extjs GS profile. [jone]
3.1.4 (2012-03-19)
  • Removed integrated tooltips. If you still wand tooltips, use ftw.tooltip [mathias.leimgruber]
3.1.3 (2012-03-12)
  • Disable tabbedview_search instead of hiding. [Julian Infanger]
  • Add new spinner, update spinner position and add helper functions. [jone]
3.1.2 (2012-03-05)
  • Switch tab after loading contents of new tab, add "loading_tab" class while loading. [jone]
  • Filtering listings: do not flush all params but flush pagenumber only. [jone]
  • Hide label of "Filter" box, but keep it for accessibility rasons. [jone]
  • Make search function more robust, so that it is possible to have a non-listing view, switchin to a listing view when a search term is entered. [jone]
  • Fix bug in listing menu generator. [jone]
  • Add a default "reset table configuration" folder_contents action (which is only visible on tabbedview tabs). [jone]
3.1.1 (2012-02-28)
  • Adjust MANIFEST.in: add include for rst files (reamde.rst). [phgross]
3.1 (2012-02-27)
  • Added some French translations [ttschanz]

  • Fix submenu click event binding. Dont use live(click). [mathias.leimgruber]

  • Implemented show_menu condition. [mathias.leimgruber]

  • Add form authenticator to listing forms. [jone]

  • Fix bug where the persistent ext-js grid state when trying to acces the sort information. The sort information may not be there in some cases. [jone]

  • Remove old i18n directory. #3 [jone]

  • Make both JS implementation (default and extjs) work on same branch:

    • Better use of ftwtable jquery plugin in tabbed view.
    • Register a default tabbedview dictstorage, stored on the plone site.
    • Fix markup for extjs implementation.
    • Implement selecting and menu support for default implementation.
    • Respect extjs-config in registry for deciding if the extjs JS should be loaded.
    • Remove non-ftw.tabbedview translations added from custom projects.
    • Various cleanup and minor bug fixes.


3.0 (2011-11-17)
  • Moved hidden input element into tabbedview_form so it always gets submitted. [lgraf]
  • Implements a dynamic batchbox for batched listing views, which allows to change the batchsize (hits per site) dynamically. [phgross]
  • Automaticly reset batching while filtering (with the textfilter) [phgross]
  • Made it possible to set a empty dict as gridstate configuration [phgross]
  • Add possibility to call javascript functions from tabbeview-menu actions. By default every tabbedview_menu link just submit the form. Used for the reset_tableconfiguration action. [phgross]
3.0b9 (2011-10-04)
  • added morelink (show all link) support, for overview listings with boxes. Every show all link loads now autmaticly the corresponding tab. [phgross]
3.0b8 (2011-107-12)
  • fixed select_all method (works now also with direct call) [phgross]
  • removed half-implemented variable batching_enabled fixed select_all function [phgross]
  • removed some translations which don't belong here [ttschanz]
  • slightly changed html structure to make it easier to style [fsprenger]
  • Fixed translation files [jbaumann]
  • Show amount of matching in "select-all" link. [jbaumann]
  • Enable batching when grouping is enabled. This solves performance issues on heavy tables. [jbaumann]
  • Fixed bug where grouping in the state broke the table. [jbaumann]
  • Read sort_on attribute from grid storage [jbaumann]
  • Implemented grid state storage stuff with ftw.dictstorage [jbaumann]
  • Implemented server side grouping of listing tables [jbaumann]
  • added action permission check [mathias.leimgruber]
  • tagged from master instead of plone4 compatibility branch Your should realy use this one [mathias.leimgruber]
  • Changed the minimum pagesize to 1. A small pagesize is necessary for easy testing. [jbaumann]
  • Fixed select-all: It does now select all items in the tab, not only the visibles. Fixed also ordering and duplicity. [jbaumann]
  • Using jqueryui is now optional. Use the "jqueryui" extras_require for enabling UI. [jbaumann]
  • rebuild tabbedview, so that in only done the tabbedview js stuff, when the tabbedview is displayed
  • Added maintainer properly in setup.py [jbaumann]
  • Remove toLoverCase since its not really needed and error-prone [vbaumann]
  • timesheet-tabbedview: added some translations [phgross]
  • Translations [fsprenger]
  • added translations [phgross]
  • Filter boxes Functionality (with a accordian view) [phgross]
  • Auto Filter boxes Functionality (with a accordian view) [phgross]
  • Auto Count Functionality [phgross]
  • Corrected the select all action [phgross]
  • Added sort functionality for the SolrListingView [phgross]
  • Translation for tab's titles added [jbaumann]

Subscribe to package updates

Last updated Jan 9th, 2014

What does the lock icon mean?

Builds marked with a lock icon are only available via PyPM to users with a current ActivePython Business Edition subscription.

Need custom builds or support?

ActivePython Enterprise Edition guarantees priority access to technical support, indemnification, expert consulting and quality-assured language builds.

Plan on re-distributing ActivePython?

Get re-distribution rights and eliminate legal risks with ActivePython OEM Edition.