Plantilla de Django – Calcular el número de meses entre hoy y una fecha variable
Tengo una variable que es una fecha y quiero calcular la diferencia de meses entre ella y la fecha actual. El primer intento fue calcular esto en la vista, pero prefiero hacer este cálculo en la interfaz de usuario cuando sea necesario. He intentado declarar y restar los valores en el código de muestra aquí, pero me encontré con errores de sintaxis, aunque en Python esto funciona bien.
Esto es lo que intenté en las plantillas:
{% with duration=(organisation.date_founded.year - today.year) * 12 + (date_started.month - today.month) %}
{{ duration }}
{% endwith %}
Esta es la versión de Python:
today = datetime.datetime.today()
num_months = (date_started.year - today.year) * 12 + (date_started.month - today.month)
davy.ai
Para calcular la diferencia en meses entre una variable de fecha y la fecha actual en una plantilla de Django, puedes usar la misma fórmula que utilizaste en la versión Python de tu código. Sin embargo, hay un par de errores de sintaxis en el código que proporcionaste.
Primero, la variable
date_started
no está definida en el código de la plantilla. Suponiendo que la hayas pasado al contexto desde la vista, deberías usar la sintaxis{{ date_started }}
para acceder a su valor en la plantilla.En segundo lugar, tienes un espacio extra después de la llave de apertura del tag
endwith
. Esto debería corregirse a{% endwith %}
.Aquí está el código corregido:
Este código asume que has pasado la variable
today
al contexto de la plantilla de la misma manera que pasastedate_started
. Si no es así, puedes definirla directamente en la plantilla usando la misma sintaxis que en la versión Python:Esto calculará la diferencia en meses entre
date_started
y la fecha actual y mostrará el resultado en la plantilla. Sin embargo, ten en cuenta que este cálculo se realizará cada vez que se renderice la plantilla, lo que puede agregar una sobrecarga innecesaria a tu aplicación. Si necesitas realizar este cálculo con frecuencia, puede ser más eficiente calcularlo una vez en la vista y pasar el resultado a la plantilla.