I've run into a problem, why won't this work:
# controllers/default.py
def search():
return dict(showsearch=objects.Search.show(db))
# controllers/default.py
# modules/objects.py
from gluon import *
request = current.request
class Search(object):
def show(self, db):
search =
db(db.listing.title==request.args(0)).select(db.listing.ALL)
items = []
for person in search:
items.append(DIV(A(person.first_name, _href=URL('listing',
args=person.id))))
return TAG[''](*items)
# modules/objects.py
I'm so confused as to why that won't work, it's returning the error:
AttributeError: type object 'Search' has no attribute 'show'
On Aug 22, 5:57 pm, Jarrod Cugley <[email protected]> wrote:
> 1 more thing, could you explain these lines please:
>
> from gluon import *
> request = current.request
>
> On Aug 22, 4:46 pm, Bruno Rocha <[email protected]> wrote:
>
>
>
>
>
>
>
> > I guess it is not wrong, but I do not recommend too much code in
> > controllers, controllers should be for decide the app flow.
>
> > I reccomend you to create a module in /modules
>
> > # modules/myobjects.py
> > from gluon import *
> > request = current.request
> > class Myobjects(object):
> > def showsearch(self, db):
> > search
> > = db(db.listing.title==request.args(0)).select(db.listing.ALL)
> > items = []
> > for person in search:
> > items.append(DIV(A(person.first_name, _href=URL('listing',args=
> > person.id))))
>
> > return TAG[''](*items)
> > # modules/myobjects.py
>
> > then in controller you do:
>
> > # controllers/default.py
>
> > def search():
> > from myobjects import Myobjects
> > return dict(showsearch=Myobjects.showsearch(db))
>
> > # controllers/deafault.py
>
> > Note that you need to pass 'db' instance to the module
>
> > I think the controller code looks much better in this way, needs web2py
> > 1.97+
>
> > On Mon, Aug 22, 2011 at 2:10 AM, Jarrod Cugley <[email protected]> wrote:
> > > Is there anything wrong with doing this inside default.py controller?:
>
> > > def search():
> > > def showsearch():
> > > search =
> > > db(db.listing.title==request.args(0)).select(db.listing.ALL)
> > > items = []
> > > for person in search:
> > > items.append(DIV(A(person.first_name, _href=URL('listing',
> > > args=person.id))))
>
> > > return TAG[''](*items)
> > > return dict(showsearch=showsearch())
>
> > > That is, nesting functions inside functions, I'm not getting an error,
> > > it's working as intended but is this a horrible practice to get into?
> > > Is there an ideal way?
>
> > --
>
> > --
> > Bruno Rocha
> > [ About me:http://zerp.ly/rochacbruno]
> > [ Aprenda a programar:http://CursoDePython.com.br]
> > [ O seu aliado nos cuidados com os animais:http://AnimalSystem.com.br]
> > [ Consultoria em desenvolvimento web:http://www.blouweb.com]