Llamar a una función que recibe un parámetro desde una plantilla en Django

written by uve 24 December 2010

Quien haya profundizado un poquito en el sistema de plantillas que ofrece Django sabrá que solamente se pueden invocar a funciones que no reciban parámetros.

Existe una forma de hacer esto, aunque no sé hasta que punto es correcta. Si es forzosamente necesario hacerlo, aquí explico como se puede hacer.

En mi caso es un método de un modelo que chequeará si un usuario tiene acceso al objeto en cuestión:

from django.db import models
from django.template.defaultfilters import register

class Modelo(models.Model):
   ...
   @register.filter
   def has_access(self, user):
      ...


Ahora, en el fichero de plantilla podemos hacer lo siguiente:

{% if obj|has_access:user %}
...
{% else %}
...
{% endif %}

El truco está en que hemos introducido un filtro al sistema de plantillas. El problema es que a la hora de usado parece un poco ortopédico :)

Tags

La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.