llamar a métodos desde plantillas

462 views
Skip to first unread message

Beni

unread,
Nov 16, 2007, 8:03:26 AM11/16/07
to djan...@googlegroups.com
Hola,

como dice en la documentación de django (http://www.djangoproject.com/documentation/templates/#variables) es posible llamar a un método de un modelo, pero yo necesito llamar a un método que recibe un parámetro.

¿Es posible llamar a métodos con parámetros desde una plantilla ?

Por algún lado leí que si no se podía hacer en una plantilla habría que hacerlo en la vista, aunque me facilitaría mucho las cosas.

Un saludo.

Leo Soto M.

unread,
Nov 16, 2007, 8:40:18 AM11/16/07
to djan...@googlegroups.com
On Nov 16, 2007 10:03 AM, Beni <camo...@gmail.com> wrote:
> Hola,
>
> como dice en la documentación de django
> (http://www.djangoproject.com/documentation/templates/#variables) es posible
> llamar a un método de un modelo, pero yo necesito llamar a un método que
> recibe un parámetro.
>
> ¿Es posible llamar a métodos con parámetros desde una plantilla ?

No, no se puede.

Si se justifica, puedes implementar tus propios tags (o filtros) para
plantillas, los que obviamente sí pueden recibir parámetros:

http://www.djangoproject.com/documentation/templates_python/#extending-the-template-system

Saludos,
--
Leo Soto M.
http://blog.leosoto.com

Xin

unread,
Nov 16, 2007, 9:13:33 AM11/16/07
to djan...@googlegroups.com
Solo debes crearte un tag de este estilo

{% call obj func par1,named=par2 %}

Decodificar-lo, para obtener el objecto, la funcion i los paràmetros.
I allí llamar a la función así.
    getattr(obj,'func')(par1,named=par2)

Teniendo en cuenta que debes decodificar:
   obj, func, par1 i par2.

Beni

unread,
Nov 17, 2007, 6:44:14 AM11/17/07
to djan...@googlegroups.com
El problema exacto es que quiero renderizar una lista de modelos en un plantilla y mostrar para algunos de ellos un botón dependiendo de el resultado de un método del mismo.

{% for o in lista_objetos %}
  ....
  {% if o.se_cumple PARAM %}
     ... boton ...
  {% endif %}

{% endfor %}

Concretamente el parametro que recibe lo puedo obtener del request de la vista. Por que lo que pensé que también se podría, de alguna forma (que no se si es posible), obtener el request dentro del método del modelo. Aunque no me parecía correcto mezclar datos de las vistas con los modelos.

Supongo que habrá que crear el tag para llamar métodos. Aunque no comprendo por que se puede llamar a un método de un modelo y no poder pasarle parámetros al mismo.

Grancias.

On Nov 16, 2007 3:13 PM, Xin <xin...@gmail.com> wrote:
Solo debes crearte un tag de este estilo

{% call obj func par1,named=par2 %}

Decodificar-lo, para obtener el objecto, la funcion i los paràmetros.
I allí llamar a la función así.
    getattr(obj,'func')(par1,named=par2)

Teniendo en cuenta que debes decodificar:
   obj, func, par1 i par2.


El 16/11/2007, a las 14:03, Beni escribió:

Hola,

como dice en la documentación de django ( http://www.djangoproject.com/documentation/templates/#variables) es posible llamar a un método de un modelo, pero yo necesito llamar a un método que recibe un parámetro.
Reply all
Reply to author
Forward
0 new messages