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
siehe auch: stackoverflow.com/questions/2571515/...
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie gesagt in diese Frage,
datetime.strftime
nicht akzeptierenunicode
string. Doch in jinjaunicode
wird immer verwendet.Um dieses dilemma zu lösen, eine Lösung, die ich kann, kommen Sie über einen benutzerdefinierten filter schreiben, die zuerst konvertiert
unicode
zustr
- und dann wieder:(Hinweis: befestigen Sie die benutzerdefinierte Filter, die auf eine Umwelt.)
InformationsquelleAutor kavinyao