Llamar a una función que recibe un parámetro desde una plantilla en Django
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é.
