Componente para adicionar imagenes

32 views
Skip to first unread message

Marco Antonio Castro Collazos

unread,
Feb 14, 2017, 9:35:10 AM2/14/17
to web2py-usuarios
Buen dia a todos,

He creado un componente que permite adicionar una imagen a una tabla, cuando ejecuto sin hacer el llamado con load, solo el componente funciona, pero al adicionar a una vista no funciona, si alguien me puede dar una mano se los agradezco.

codigo:

Model:
db.define_table('tbl_lstpedidos',
                Field('descripcion', 'string'),
                Field('adicional','text'),
                format ='%(descripcion)s'
               )

db.define_table('tbl_estados',
                Field ('estado'),
                format ='%(estado)s'
               )

db.define_table ('tbl_solicitud',
                 Field('idlstpedido', 'reference tbl_lstpedidos'),
                 Field('imagen','upload'),
                 Field('estado','reference tbl_estados'),
                 auth.signature
               )

Componente:
Controlador  (revisor.py)
def publicar():
    idsolucion=request.args(0) or redirect(URL('index'))
    titulos=db(
        (db.tbl_solicitud.id==idsolucion) &
        (db.tbl_lstpedidos.id==db.tbl_solicitud.idlstpedido)&
        (db.tbl_estados.id==db.tbl_solicitud.estado)
        ).select(db.tbl_lstpedidos.descripcion, db.tbl_lstpedidos.adicional, db.tbl_estados.estado).first().as_dict()

    busqueda=db(db.tbl_solicitud.id ==idsolucion).select().first()
    db.tbl_solicitud.estado.writable=False
    db.tbl_solicitud.estado.readable=False
    db.tbl_solicitud.idlstpedido.writable=False
    db.tbl_solicitud.idlstpedido.readable=False
    formulario=SQLFORM(db.tbl_solicitud,busqueda, submit_button="Subir imagen",showid=False)
    if formulario.process().accepted:
        if busqueda.estado==1:
            db(db.tbl_solicitud.id==idsolucion).update(estado=2)
            redirect (URL("publicar"))
        response.flash = 'formulario aceptado'
    elif formulario.errors:
        response.flash = 'el formulario tiene errores'
    return locals()


def download():
    return response.download(request, db)

View: (revisor/publicar.html)
{{extend 'layout.html'}}
    <div class="row">
      <div class="col-md-4"><h3>{{=titulos["tbl_lstpedidos"]["descripcion"]}}</h3></div>
        {{if busqueda.estado==1:}}
        <div class="col-md-4">{{=formulario}}</div>
        <div class="col-md-4 "><h3>
          <div class="label label-info">{{=titulos["tbl_estados"]["estado"]}}</div></h3>
        </div>

        {{else:}}
          <div class="col-md-4"> </div>
          <div class="col-md-4 "><h3>
              <div class="label label-primary">{{=titulos["tbl_estados"]["estado"]}}</div></h3>
          </div>
        {{pass}}
    </div>
  </div>
</div>

view (revisor/publicar.load)
{{if busqueda.estado==1:}}
    <div class="panel panel-info">
{{else:}}
    <div class="panel panel-primary">
{{pass}}

  <div class="panel-heading">Documento requerido</div>
  <div class="panel-body">
    <div class="row">
      <div class="col-md-4"><h3>{{=titulos["tbl_lstpedidos"]["descripcion"]}}</h3></div>
        {{if busqueda.estado==1:}}
        <div class="col-md-4">{{=formulario}}</div>
        <div class="col-md-4 "><h3>
          <div class="label label-info">{{=titulos["tbl_estados"]["estado"]}}</div></h3>
        </div>

        {{else:}}
          <div class="col-md-4"> </div>
          <div class="col-md-4 "><h3>
              <div class="label label-primary">{{=titulos["tbl_estados"]["estado"]}}</div></h3>
          </div>
        {{pass}}
    </div>
  </div>
</div>


Llamado del componente:
Controller (registro.py)
@auth.requires_login()
def index():
    busqueda = buscarregistros()
    return locals()


@auth.requires_login()
def buscarregistros():
    #si no hay regsitgros en solicitud
    busqueda=db(db.tbl_solicitud.created_by==auth.user_id).select()
    if not(busqueda):
        #Crea solicitud
        #registronuevo()#Se crean los datos para el usuario nuevo
        pedidos=db(db.tbl_lstpedidos).select()
        for codpedido in pedidos:
            db.tbl_solicitud.insert(idlstpedido=codpedido.id,estado=1,created_by=auth.user_id)
        busqueda=db(db.tbl_solicitud.id==auth.user_id).select()
    return busqueda
    #return locals()

def download():
    return response.download(request, db)


View(registro/index.html)
{{extend 'layout.html'}}
<h2>Control de registro Documentos</h2>
{{for debido in busqueda:}}
{{=LOAD('revisor','publicar.load',args=[debido.id],ajax=True)}}
{{pass}}

----------------------
Muestra como lo necesito, pero no sube la imagen, si dejo el parametro ajax=False, no hace nada.

de antemano agradezco una luz para este problema, gracias.

Javier Pepe

unread,
Feb 14, 2017, 9:53:57 AM2/14/17
to web2py-usuarios
Probaste poniendo un target a cada load, para que tengan div con difrentes nombres

{{=LOAD('revisor','publicar.load',args=[debido.id],ajax=True,target='%s' % debido.id)}}

--
Has recibido este mensaje porque estás suscrito al grupo "web2py-usuarios" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a web2py-usuari...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Marco Mansilla

unread,
Feb 22, 2017, 12:07:11 AM2/22/17
to web2py-...@googlegroups.com
El Mon, 13 Feb 2017 20:49:30 -0800 (PST)
Marco Antonio Castro Collazos <soportes...@gmail.com> escribió:
> *View: (revisor/publicar.html)*{{extend 'layout.html'}}
> <div class="row">
> <div
> class="col-md-4"><h3>{{=titulos["tbl_lstpedidos"]["descripcion"]}}</h3></div>
> {{if busqueda.estado==1:}}
> <div class="col-md-4">{{=formulario}}</div>
> <div class="col-md-4 "><h3>
> <div class="label
> label-info">{{=titulos["tbl_estados"]["estado"]}}</div></h3>
> </div>
>
> {{else:}}
> <div class="col-md-4"> </div>
> <div class="col-md-4 "><h3>
> <div class="label
> label-primary">{{=titulos["tbl_estados"]["estado"]}}</div></h3>
> </div>
> {{pass}}
> </div>
> </div>
> </div>
>
>
> *view (revisor/publicar.load)*{{if busqueda.estado==1:}}
> *Controller (registro.py)*
> @auth.requires_login()
> def index():
> busqueda = buscarregistros()
> return locals()
>
>
> @auth.requires_login()
> def buscarregistros():
> #si no hay regsitgros en solicitud
> busqueda=db(db.tbl_solicitud.created_by==auth.user_id).select()
> if not(busqueda):
> #Crea solicitud
> #registronuevo()#Se crean los datos para el usuario nuevo
> pedidos=db(db.tbl_lstpedidos).select()
> for codpedido in pedidos:
>
> db.tbl_solicitud.insert(idlstpedido=codpedido.id,estado=1,created_by=auth.user_id)
> busqueda=db(db.tbl_solicitud.id==auth.user_id).select()
> return busqueda
> #return locals()
>
> def download():
> return response.download(request, db)
>
>
>
> *View(registro/index.html)*{{extend 'layout.html'}}
> <h2>Control de registro Documentos</h2>
> {{for debido in busqueda:}}
> {{=LOAD('revisor','publicar.load',args=[debido.id],ajax=True)}}
> {{pass}}
>
> ----------------------
> Muestra como lo necesito, pero no sube la imagen, si dejo el
> parametro ajax=False, no hace nada.
>
> de antemano agradezco una luz para este problema, gracias.
>

Fijate que te dice la consola en el inspector de elementos o firebug
cuando envias el formulario, hasta donde se no se puede enviar archivos
via ajax por seguridad, es un tema de los navegadores y javascript, asi
que vas a tener que usar algun componente que use flash o intentar con
angularjs.

Yoel Benitez Fonseca

unread,
Mar 2, 2017, 9:06:47 AM3/2/17
to web2py-usuarios
Me parece que en alguna parte del libro dicen que no se pueden usar campos de tipo 'upload' en componentes cargados vía AJAX... Yo me busque una solución en otro proyecto dejame pasarte el link:

  http://valums-file-uploader.github.io/file-uploader/

si quieres ver un ejemplo funcionando en web2py yo lo uso en este projecto:

https://github.com/ybenitezf/nstock

fijate en el componente plugin_photoset

Marco Castro

unread,
May 22, 2017, 7:03:53 PM5/22/17
to web2py-usuarios
Gracias a todos por reponde, efectivamente en el manual comenta que no es posible hacer esto.



El martes, 14 de febrero de 2017, 9:35:10 (UTC-5), Marco Antonio Castro Collazos escribió:

Marco Mansilla

unread,
May 22, 2017, 11:52:37 PM5/22/17
to web2py-...@googlegroups.com
Personalmente no lo he probado, pero habria que ver en estos casos que
sucede con componentes de vuejs o angular para la subida de multiples
imagenes. Si tienes tiempo has una prueba, y si lo hago primero te hago
saber como me va.

Saludos.
> > *View: (revisor/publicar.html)*{{extend 'layout.html'}}
> > <div class="row">
> > <div
> > class="col-md-4"><h3>{{=titulos["tbl_lstpedidos"]["descripcion"]}}</h3></div>
> > {{if busqueda.estado==1:}}
> > <div class="col-md-4">{{=formulario}}</div>
> > <div class="col-md-4 "><h3>
> > <div class="label
> > label-info">{{=titulos["tbl_estados"]["estado"]}}</div></h3>
> > </div>
> >
> > {{else:}}
> > <div class="col-md-4"> </div>
> > <div class="col-md-4 "><h3>
> > <div class="label
> > label-primary">{{=titulos["tbl_estados"]["estado"]}}</div></h3>
> > </div>
> > {{pass}}
> > </div>
> > </div>
> > </div>
> >
> >
> > *view (revisor/publicar.load)*{{if busqueda.estado==1:}}
> > *Controller (registro.py)*
> > @auth.requires_login()
> > def index():
> > busqueda = buscarregistros()
> > return locals()
> >
> >
> > @auth.requires_login()
> > def buscarregistros():
> > #si no hay regsitgros en solicitud
> > busqueda=db(db.tbl_solicitud.created_by==auth.user_id).select()
> > if not(busqueda):
> > #Crea solicitud
> > #registronuevo()#Se crean los datos para el usuario nuevo
> > pedidos=db(db.tbl_lstpedidos).select()
> > for codpedido in pedidos:
> > db.tbl_solicitud.insert(idlstpedido=codpedido.id
> > ,estado=1,created_by=auth.user_id)
> > busqueda=db(db.tbl_solicitud.id==auth.user_id).select()
> > return busqueda
> > #return locals()
> >
> > def download():
> > return response.download(request, db)
> >
> >
> >
> > *View(registro/index.html)*{{extend 'layout.html'}}
Reply all
Reply to author
Forward
0 new messages