2009-06-12 12 views
8

Nella mia applicazione Django ricevo volte da un webservice, fornito come una stringa, che uso nei miei modelli:formattazione volte data prevista come stringhe in Django

{{date.string}} 

Questo mi dà una data come ad esempio:

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

Questi sono ovviamente un po 'brutti, e mi piacerebbe presentarli in un bel formato per i miei utenti. Django ha una grande costruito in data formattatore, che avrebbe fatto esattamente quello che volevo:

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

Tuttavia, questo si aspetta che il valore da fornire come un oggetto data, e non una stringa. Quindi non posso formattare usando questo. Dopo aver cercato qui su StackOverflow pythons sembra che lo strptime faccia quello che voglio, ma essendo abbastanza nuovo per Python mi chiedevo se qualcuno potesse trovare un modo più semplice per ottenere la formattazione della data usando le stringhe, senza dover ricorrere alla scrittura di un intero nuovo custom time tag modello?

risposta

10

Probabilmente è meglio analizzare la stringa ricevuta dal servizio web nel codice di visualizzazione e quindi passare il datetime.date (o la stringa) al modello per la visualizzazione. Lo spirito dei modelli di Django è che qui si dovrebbe fare molto poco lavoro di programmazione; sono solo per presentazione, ed è per questo che fanno di tutto per impedirti di scrivere codice Python incorporato in HTML.

Qualcosa di simile:

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}) 

Come Matteo fa notare, questa scende il fuso orario. Se si desidera preservare l'offset da GMT, provare a utilizzare l'eccellente libreria di terze parti dateutils, che gestisce senza problemi le date di analisi in più formati, con fusi orari, senza dover fornire un modello di formato temporale come strptime.

+5

+1 Mantenere l'elaborazione dei dati nella vista, non nel modello. – krubo

+8

Si potrebbe obiettare che dal momento che si sta formattando la data, sarebbe opportuno farlo nel livello di presentazione (es. Template) – btk

+1

Mi piace mantenere i miei "contesti" json-able, dal momento che questo mi permette di restituirli anche come risposte REST. Python datetime non è json-serializable, quindi preferirei fare la conversione nel template. Immagino che questo possa essere ottenuto usando un templatetag. –

0

Questo non riguarda il tag Django, ma il codice è strptime:

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

nota che si sta lasciando cadere le informazioni fuso orario.

Problemi correlati