actualizar el valor de una variable dentro de una plantilla - django

He visto suficientes ejemplos que me permiten declarar una nueva variable dentro de una plantilla y establecer su valor. Pero lo que quiero hacer es actualizar el valor de una variable particular dentro de la plantilla.

Por ejemplo, tengo un campo de fecha y hora para un objeto y quiero agregar la zona horaria según el request.user de la plantilla. Así que voy a crear un template filter como {% add_timezone object.created %} y lo que hará es que agregará la zona horaria a object.created y después de eso cada vez que accedo {{object.created}} me dará el valor actualizado.

¿Alguien puede decirme cómo se puede hacer esto? Sé que necesito actualizar el context variable del filtro de plantilla. Pero no se como.

preguntado el 04 de julio de 12 a las 09:07

¿Qué has intentado hasta ahora? Esto es stackoverflow, no doalltheworkforme.com. -

Lógica como esta realmente no debería estar en la plantilla, ya sabes. ¿Por qué no puedes hacer esto en la vista? -

No quiero hacerlo en la vista porque puede haber un campo de fecha en el conjunto de consultas y luego tendré que cambiar los atributos en el propio conjunto de consultas. Usando esta etiqueta de plantilla, puedo hacerla muy genérica:

1 Respuestas

No puede modificar un valor en una plantilla, pero puede definir variables de 'alcance' usando el {% with %} tag:

{% with created=object.created|add_timezone %}
    Date created with fixed timezone: {{ created }}
{% endwith %}

sin que importe add_timezone es un filtro simple:

def add_timezone(value):
    adjusted_tz = ...
    return adjusted_tz

register.filter('add_timezone', add_timezone)

Respondido 04 Jul 12, 13:07

Gracias, parece una solución bastante decente, pero hay un problema. tendré que usar mucho with etiquetas si hay varios objetos de este tipo - Sachin

Por supuesto, puede modificar un valor en una plantilla, solo necesita escribir una etiqueta de plantilla personalizada para esto. - bruno desthuilliers

@Tisho Aha, este es un distingo interesante. Si las etiquetas de plantilla y los filtros están "fuera de la plantilla", entonces no queda mucho por hacer aquí - bruno desthuilliers

En realidad, no puede modificar una variable en una plantilla incluso con una etiqueta de plantilla o un filtro. Solo puede usarlo (usarlo en un cálculo, filtrarlo, renderizar en html personalizado, etc.). Pero esta variable tendrá el mismo valor si la usa nuevamente en la plantilla. La única forma de reutilizar una variable modificada es con {%with%}, como una variable de alcance, o, sí, escribir algo como {% with %} que contiene el estado de la variable. Así que estoy usando el 'valor' anterior en lugar de la variable, tal vez esto sea un poco confuso... - tisho

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.