Ok, will try a more concrete example, and I'll start by showing what I used 
to have :

In *MODELS/MODELS.PY *:

   db.define_table('modelA ',
                          Field('modelA_field1','string),
                          Field('modelA_field2','string),
                        )

   db.define_table('modelB ',
                          Field('modelB_field1','string),
                          Field('modelB_field2','string),
                        )


In *CONTROLLERS/DEFAULT.PY* :

    def  modelA_read():
           # I do all work here, in regard to generate forms, pagination, 
etc...
          return dict(read_form_for_modelA)

    def  modelB_read():
           # Do all work here, in regard to generate forms, pagination, 
etc...
          return dict(read_form_for_modelB)

    def  modelA_edit():
           # Do all work here, in regard to generate forms, etc...
          return dict(edit_form_for_modelA)

    def  modelB_edit():
           # Do all work here, in regard to generate forms, etc...
          return dict(edit_form_for_modelB)


In *VIEWS/DEFAULT/MODELA_READ.HTML*. 
>
> {{extend 'layout.html'}}
>  <!-- I do all representation of read form for ModelA-->

 
In *VIEWS/DEFAULT/MODELB_READ.HTML*. 
>
> {{extend 'layout.html'}}
>  <!-- I do all representation of read form for ModelB-->

 
In *VIEWS/DEFAULT/MODELA_EDIT.HTML*. 
>
> {{extend 'layout.html'}}
>  <!-- I do all representation of edit form for ModelA-->


In *VIEWS/DEFAULT/MODELB_EDIT.HTML*. 
>
> {{extend 'layout.html'}}
>  <!-- I do all representation of edit form for ModelB-->


Most of the work done inside the controllers (modelA_read/modelB_read and 
modelA_edit/modelB_edit), and inside the views 
(modelA_read.html/modelB_read.html and modelA_edit.html/modelB_edit.html), 
was basically the same.


So now I have :


In *MODELS/MODELS.PY *(Nothing changed here) :

   db.define_table('modelA ',
                          Field('modelA_field1','string),
                          Field('modelA_field2','string),
                        )

   db.define_table('modelB ',
                          Field('modelB_field1','string),
                          Field('modelB_field2','string),
                        )


In *MODELS/GENERIC.PY* :

    def generic_read():
           # Do all work here, get mydata, generate forms, pagination, 
etc...
          return dict(read_form_for_whatever_model)

    def generic_edit():
           # Do all work here, get mydata, generate forms, pagination, 
etc...
          return dict(edit_form_for_whatever_model)


In *CONTROLLERS/DEFAULT.PY* :

    def  modelA_read():
           # I do nothing here
          return generic_read()

    def  modelB_read():
           # I do nothing here
          return generic_read()

    def  modelA_edit():
           # I do nothing here
          return generic_edit()

    def  modelB_edit():
           # I do nothing here
          return generic_edit()


In *VIEWS/DEFAULT/MODELA_READ.HTML*.
>
> {{extend 'generic_read.html'}}            # I do nothing else here either


In *VIEWS/DEFAULT/MODELB_READ.HTML*. 
>
> {{extend 'generic_read.html'}}            # I do nothing else here either


In *VIEWS/DEFAULT/MODELA_EDIT.HTML*. 
>
> {{extend 'generic_edit.html'}}            # I do nothing else here either

 
In *VIEWS/DEFAULT/MODELB_EDIT.HTML*. 
>
> {{extend 'generic_edit.html'}}            # I do nothing else here either

 
 In *VIEWS/GENERIC_READ.HTML*

>  {{extend 'layout.html'}}
>  {{include}}
>   <!-- Do all representation of my read form, for whatever model -->
>
 
 In *VIEWS/GENERIC_EDIT.HTML*

>  {{extend 'layout.html'}}
>  {{include}}
>   <!-- Do all representation of my edit form, for whatever model -->

So, my question was about how to get rid of these lines on DEFAULT.PY :

     def  modelfoo_read():
           # I do nothing here
          return generic_read()

... and also avoid having to create views for each of those controllers, 
where I only have one line of code :
         {{extend 'generic_read.html'}}  

I'm trying your solution with response.view, and it seems ok so far, but 
I'll give you final feedback...


On Monday, October 15, 2012 3:33:14 PM UTC+1, apinho wrote:
>
> Hi,
>
> I started with web2py a few weeks ago, writing some very simple apps. I 
> noticed that I was constantly repeating myself in the following steps :
>    Write a controller to fetch the data
>    Write a view to present data.
>
> So, I made generic controllers and views, which I later call using this 
> schema :
>
> User request : http://myserver/myapp/mymodel_list
>
> In CONTROLLERS/DEFAULT.PY :
>     def  mymodel_list():
>           return generic_list()
>
> In MODELS/GENERIC.PY :
>     def generic_list():
>            # Do all work here, get mydata, pagination, etc...
>           return dict(mydata)
>
> In VIEWS/DEFAULT/MYMODEL_LIST.HTML :
>     {{extend 'generic_list.html'}}
>
> In VIEWS/GENERIC_LIST.HTML
>     {{extend 'layout.html'}}
>     {{include}}
>     <!-- Do all representation of mydata -->
>
> This works well for me, cause I only have to deal with 4/5 controller and 
> views (generic_list, generic_read, generic_add, generic_edit).
>
> One question though :
>    For every model I have to create all the functions :
>          def mymodel_read():
>               return generic_read()
>          def mymodel_list():
>               return generic_list()
>         etc...
>    .. and I also have to create all the views :
>          mymodel_list.html :
>                 {{extend 'generic_list'}}
>          mymodel_list.read :
>                 {{extend 'generic_read'}}
>    ...etc
>
> I believe there must be a way to avoid creating these views and these 
> controllers, through the use of routes, or something.
>
> Someone care to guide me to do this ?
>
>
>
>
>
>

-- 



Reply via email to