Django deutsches Datum mit strftime?

Django, Flask, Bottle, WSGI, CGI…
Antworten
ApplepieThon
User
Beiträge: 6
Registriert: Mittwoch 2. Mai 2018, 14:43

Hallo Zusammen,

ich hoffe der Post ist im richtigen Forum and ihr könnt mir mit meinem Problem weiterhelfen. Bin aktuell noch ein relativer Python/Django-Noobie and stecke gerade bei einem Problem fest.

Und zwar habe ich folgenden Code:

Code: Alles auswählen

date = timezone.make_aware(program.last_registration_date, timezone=pytz.timezone('Europe/Berlin')).strftime('%d %B %Y, %H:%M')
Und möchte dieses Date in meinem String ausgeben:

"Anmeldung möglich bis {date}"

Eigentlich klappt alles bisher wunderbar, nur das mein date in englisch ausgegeben wird und nicht in deutsch. Das heißt am Ende bekomme ich den String:

"Anmeldung möglich bis January", was ich ja eigentlich nicht möchte.

In meinen Settings ist soweit alles korrekt: TIME_ZONE ist auf Europe/Berlin, LANGUAGE_CODE auf 'de-DE' und USE_L1ON / USE_I18N sind beide True.

Liegt das an der Codezeilen oder timezone? Ich habe davor auch schon versucht:

Code: Alles auswählen

date = timezone.localtime(program.last_registration_date, pytz.timezone('Europe/Berlin')).strftime.strftime('%d %B %Y, %H:%M')
oder

Code: Alles auswählen

date = program.last_registration_date.strftime('%d %B %Y, %H:%M')
Aber irgendwie scheint nichts zu klappen. Weiß einer vielleicht wieso und wie ich das hinbekommen kann?

Vielen dank schon mal für alle Antworten!
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

was kommt denn raus, wenn du im Template:

Code: Alles auswählen

{% load l10n %}
...
Anmeldung möglich bis {date|localize}
einbaust?

Gruß, noisefloor
ApplepieThon
User
Beiträge: 6
Registriert: Mittwoch 2. Mai 2018, 14:43

noisefloor hat geschrieben:Hallo,

was kommt denn raus, wenn du im Template:

Code: Alles auswählen

{% load l10n %}
...
Anmeldung möglich bis {date|localize}
einbaust?

Gruß, noisefloor
Hallo und danke für den Vorschlag.

Leider kann ich date|localize so nicht nutzen, da ich im meinem den String in meiner .py File generiere, so zum überblick mal:

meine.py file:

Code: Alles auswählen

if program.is_participant_registration_allowed:
        if program.last_registration_date:
            out += u"""label-success">Anmeldung möglich bis {date}</span>"""
            date = program.last_registration_date.strftime('%d %B %Y, %H:%M')
und diesen String der in der Date Variable abgespeichert ist setze ich dann in meiner HTML-File als Django-Template:

Code: Alles auswählen

<div class="panel-body">
                                <p>
                                    {% program_registration_possible program %}wqefrg
</p>
</div>
Wenn ich da jetzt {% load l10n %} vor das {% program_registration...} setzte und in meiner .py file bei {date} das |localize dazu, wirft mir django nur den Error:

KeyError at /
u'date|localize'

Mach ich da was mit der "beklammerung" falsch?
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@ApplepieThon: Du formatierst den String auch selbst, und benutzt nicht das Templatesystem von Django. Mach das nicht, lass es Django machen.
ApplepieThon
User
Beiträge: 6
Registriert: Mittwoch 2. Mai 2018, 14:43

Okay, aber ich hab jetzt tatsächlich eine Lösung gefunden.

Statt strftime() habe ich jetzt einfach date_format benutzt

Code: Alles auswählen

date = date_format(program.last_registration_date)
Und nu werden die deutschen Dates korrekt angezeigt
Antworten