Home > pylons, python > Paginate: AttributeError: ‘thread._local’ object has no attribute ‘mapper’

Paginate: AttributeError: ‘thread._local’ object has no attribute ‘mapper’

19 Ottobre 2011

Questo errore continuava ad apparire durante l’esercizio del pylons book:
(capitolo 8 – simplesite – pagination)

In sostanza l’eccezione si scatena al momento dell’utilizzo del pager().

ricapitoliamo in un secondo dove avviene l’errore.

Importiamo webhelpers per l’utilizzo di paginate:

>>> import webhelpers.paginate as p
>>> collection = range(1000)
>>> page = p.Page(collection, page=3)
>>> page
Page:
Collection type:  <type 'list'>
(Current) page:   3
First item:       41
Last item:        60
First page:       1
Last page:        50
Previous page:    2
Next page:        4
Items per page:   20
Number of items:  1000
Number of pages:  50

risalgo agli items della pagina:

>>> for item in page.items: print item

40
41
...
59

se volessi usare il metodo pager() come da guida, senza argomenti, otterrei un errore:

>>> page.pager()

Traceback (most recent call last):
...
  File "c:programmipython26libsite-packagesRoutes-1.12.3-py2.6.eggroutes__init__.py", line 14, in __getattr__
    return getattr(self.__shared_state, name)
AttributeError: 'thread._local' object has no attribute 'mapper'
>>>

La soluzione (suggerita qui), è di importare anche mapper da routes, creare un oggetto mapper e
connetterlo al controller:

>>> from routes import Mapper
>>> mapper = Mapper()
>>> mapper.connect(':controller')

dopodichè chiamiamo pager passando come argomenti controller ed action:

>>> page.pager(controller='ctrl', action='act')
literal(u'<a class="pager_link" href="/ctrl?page=1">1</a> <a class="pager_link" href="/ctrl?page=2">2</a> <span class="pager_curpage">3</span> <a class="pager_link" href="/ctrl?page=4">4</a> <a class="pager_link" href="/ctrl?page=5">5</a> <span class="pager_dotdot">..</span> <a class="pager_link" href="/ctrl?page=50">50</a>')

ovviamente al posto di ‘ctrl’ verrà messo il nome del controller che contiene l’azione che scatena l’eccezione.

Ora riporto la cosa, in pylons per bypassare l’errore durante il render della lista pagine.

Categorie:pylons, python Tag:
  1. Nessun commento ancora...
I commenti sono chiusi.