2009-06-12 5 views
8

En mi aplicación Django que consiguen tiempos de un servicio web, proporcionado como una cadena, que utilizo en mis plantillas:formato a veces se proporciona la fecha como cadenas de Django

{{date.string}} 

Esto me ofrece la fecha, tales como:

2009-06-11 17:02:09+0000 

Estos son, obviamente, un poco feo, y me gustaría presentarlos en un buen formato para mis usuarios. Django tiene un gran construido en la fecha formateador, lo que haría exactamente lo que quería:

{{ value|date:"D d M Y" }} 

Sin embargo, esto espera que el valor que se proporciona como un objeto de fecha, y no una cadena. Entonces no puedo formatearlo usando esto. Después de buscar aquí en StackOverflow, pittons strptime parece hacer lo que quiero, pero siendo bastante nuevo en Python me preguntaba si alguien podría encontrar una manera más fácil de formatear la fecha usando cadenas, sin tener que recurrir a escribir un nuevo strptime personalizado. etiqueta de plantilla?

Respuesta

10

Probablemente sea mejor que analice la cadena recibida del servicio web en su código de vista, y luego pase datetime.date (o cadena) a la plantilla para visualizarla. El espíritu de las plantillas de Django es que se debe hacer muy poco trabajo de codificación allí; son solo para presentación, y es por eso que hacen todo lo posible para evitar que escriba código Python incrustado en HTML.

Algo así como:

from datetime import datetime 
from django.shortcuts import render_to_response 

def my_view(request): 
    ws_date_as_string = ... get the webservice date 
    the_date = datetime.strptime(ws_date, "%Y-%m-%d %H:%M:%S+0000") 
    return render_to_response('my_template.html', {'date':the_date}) 

Como Mateo señala, esto cae la zona horaria. Si desea conservar el desplazamiento desde GMT, intente utilizar la excelente biblioteca de terceros dateutils, que maneja sin problemas las fechas de análisis en múltiples formatos, con zonas horarias, sin tener que proporcionar una plantilla de formato de tiempo como strptime.

+5

+1 Mantenga el procesamiento de datos en la vista, no en la plantilla. – krubo

+8

Podría argumentar que, dado que está formateando la fecha, sería apropiado hacerlo en la capa de presentación (es decir, plantilla) – btk

+1

Me gusta mantener mis "contextos" habilitados, ya que eso me permite también devolverlos como respuestas REST. Python datetime no es json-serializable, por lo que preferiría hacer la conversión en la plantilla. Supongo que esto podría lograrse usando una plantilla de etiqueta. –

0

Esto no se ocupa de la etiqueta de Django, pero el código es strptime:

d = strptime("2009-06-11 17:02:09+0000", "%Y-%m-%d %H:%M:%S+0000") 

Tenga en cuenta que usted está cayendo la información de zona horaria.

Cuestiones relacionadas