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

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

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:\programmi\python26\lib\site-packages\Routes-1.12.3-py2.6.egg\routes\__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
  1. Non c'è ancora nessun commento.
  1. ottobre 20, 2011 alle 12:28 pm

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: