2009-06-12 6 views
8

In meiner Django-Anwendung ich mal von einem Webservice, als String zur Verfügung gestellt, dass ich in meinen Vorlagen verwenden:Formatierung Datum mal als Strings in Django bereitgestellt

{{date.string}} 

Das gibt mir ein Datum wie zum Beispiel:

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

Diese sind offensichtlich ein bisschen hässlich, und ich möchte sie in einem netten Format meinen Benutzern präsentieren. Django hat eine großes Datum Formatierer gebaut, die genau tun würden, was ich wollte:

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

jedoch dies der Wert erwartet als Date-Objekt zur Verfügung gestellt werden, und nicht einen String. Also kann ich es nicht damit formatieren. Nachdem ich hier auf StackOverflow pythons gesucht habe, scheint strptime das zu tun, was ich will, aber als Python ziemlich neu, habe ich mich gefragt, ob jemand eine einfachere Methode zur Datumsformatierung mit Strings finden könnte, ohne eine ganz neue benutzerdefinierte Strptime schreiben zu müssen Vorlagen-Tag?

Antwort

10

Sie sollten die vom Webservice empfangene Zeichenfolge in Ihrem Ansichtscode wahrscheinlich besser analysieren und dann datetime.date (oder Zeichenfolge) an die Vorlage zur Anzeige übergeben. Der Geist der Django-Vorlagen ist, dass dort sehr wenig Programmierarbeit geleistet werden sollte; Sie sind nur für die Präsentation gedacht und deshalb haben sie sich sehr bemüht, Sie daran zu hindern, in HTML eingebetteten Python-Code zu schreiben.

Etwas wie:

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

Wie Matthew weist darauf hin, fällt dies die Zeitzone. Wenn Sie den Offset von GMT beibehalten möchten, verwenden Sie die ausgezeichnete dateutils-Bibliothek von Drittanbietern, die nahtlos Daten in mehreren Formaten mit Zeitzonen verarbeitet, ohne eine Zeitformatvorlage wie z. B. strptime bereitstellen zu müssen.

+5

+1 Halten Sie die Datenverarbeitung in der Ansicht, nicht in der Vorlage. – krubo

+8

Sie könnten argumentieren, dass, da Sie das Datum formatieren, es in der Präsentationsschicht (dh Vorlage) geeignet wäre. – btk

+1

Ich möchte meine "Kontexte" json-fähig behalten, da ich dadurch auch sie zurückgeben kann als REST-Antworten. Python datetime ist nicht json-serialisierbar, daher würde ich die Konvertierung lieber in der Vorlage vornehmen. Ich denke, das könnte mit einem Templatetag erreicht werden. –

0

Das mit dem Django-Tag nicht viel, aber die strptime Code ist:

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

Beachten Sie, dass die Zeitzone Informationen sind fallen.