Python - datetime-format mit unicode-Zeichenfolge in Jinja2

Hier ist der code, den ich verwende zum formatieren einer datetime im Jinja2

# -*- encoding=utf-8

import jinja2
import datetime

now = datetime.datetime.utcnow()

print jinja2.Template(u'''Hello {{ date.strftime('%Y 年 %m 月') }}!''').render(date=now)

Gibt es einige nicht-ASCII-Zeichen ('年月') im argument von date.strftime. Jinja2 beschwert, dass

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    print jinja2.Template(u'''Hello {{ date.strftime('%Y 年 %m 月') }}!''').render(date=now)
  File "/usr/local/lib/python2.7/dist-packages/Jinja2-2.6-py2.7.egg/jinja2/environment.py", line 894, in render
    return self.environment.handle_exception(exc_info, True)
  File "<template>", line 1, in top-level template code
UnicodeEncodeError: 'ascii' codec can't encode character u'\u5e74' in position 3: ordinal not in range(128)

Wechsel ich dann, dass

print jinja2.Template(u'''Hello {{ date.strftime(u'%Y 年 %m 月') }}!''').render(date=now)

(Man beachte das " u " vor '%Y 年 %m 月'), Aber es scheint, dass Jinja2 sich nicht mit Python-unicode-literal. Es beschwert sich, dass

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    print jinja2.Template(u'''Hello {{ date.strftime(u'%Y 年 %m 月') }}!''').render(date=now)
  File "/usr/local/lib/python2.7/dist-packages/Jinja2-2.6-py2.7.egg/jinja2/environment.py", line 831, in __new__
    return env.from_string(source, template_class=cls)
  File "/usr/local/lib/python2.7/dist-packages/Jinja2-2.6-py2.7.egg/jinja2/environment.py", line 769, in from_string
    return cls.from_code(self, self.compile(source), globals, None)
  File "/usr/local/lib/python2.7/dist-packages/Jinja2-2.6-py2.7.egg/jinja2/environment.py", line 493, in compile
    self.handle_exception(exc_info, source_hint=source)
  File "<unknown>", line 1, in template
jinja2.exceptions.TemplateSyntaxError: expected token ',', got 'string'

Könnte jemand bitte sagen Sie mir, der richtige Weg? Vielen Dank im Voraus.

Das ist vielleicht dumm, aber haben Sie versucht, zu formatieren datetime-ohne Verwendung von Jinja - templates (und mit python Formatierung statt) und dann die Zeichenfolge übergeben ?
Es ist nicht eine jinja problem; der Fehler wird ausgelöst, indem Sie datetime.datetime.strftime() selbst; das format muss ein bytestring eher als eine unicode, offenbar. codiert in utf-8 vor der übergabe an strftime scheint zu funktionieren, aber ich weiß nicht, es ist einfach zu tun, dass in der Vorlage. (interessanterweise, die jinja2 Dokumentation erwähnt strftime als ein Beispiel, warum jinja behandelt ASCII-strings als str statt unicode, wird aber nicht erwähnt, was zu tun ist, wenn Sie tatsächlich benötigen, die nicht-ASCII-Zeichen im format-string...)
siehe auch: stackoverflow.com/questions/2571515/...

InformationsquelleAutor neuront | 2013-04-12

Schreibe einen Kommentar