我有一个只有dict格式的lib / languages.py文件,例如:
en = {}
en["farewell"] = "goddbye"
es = {}
es["farewell"] = "Adiós"
我还有一个lib / basehandler.py,我使用language.py,这个basehandler有一个Unicode文字(# - - 编码:utf-8 - - )
问题在于,当我用西班牙语渲染模板时,html有“Adi& ocuate; s”而不是“Adi& oaucte; s”
我尝试在languages.py上使用
es["farewell"] = "Adiós"
或添加Unicode文字(# - - 编码:utf-8 - - ),但没有任何效果。
任何人都可以请,告诉我我做错了什么或者在Jinja2上使用Unicode的最佳方式是什么
以下是源代码https://github.com/coto/gae-boilerplate,如果您想查看问题http://appengine.protoboard.cl/?&hl=es
提前致谢
答案 0 :(得分:3)
es["farewell"] = "Adiós"
您不需要使用HTML标记来获取非ASCII字符。使用Python Unicode字符串文字:
es["farewell"] = u"Adi\u00F3s"
或者,如果您的coding
指令和文本编辑器编码排列正确,只需:
es["farewell"] = u"Adiós"
在字符串中包含HTML的问题是,您必须在没有HTML转义的情况下输出它,此时字符串中的任何<
或&
字符都会中断,如果有任何用户输入添加到字符串中你遇到了安全问题。最好保持原始非转义形式的字符串,直到它们达到输出的那一刻。
答案 1 :(得分:2)
您使用的jinja2库已将autoescape默认设置为True。您可以转到basehandler.py
,在代码中覆盖此内容,然后查找以下行:
@webapp2.cached_property
def jinja2(self):
return jinja2.get_jinja2(app=self.app)
替换为:
@webapp2.cached_property
def jinja2(self):
return jinja2.get_jinja2(app=self.app,{'environment_args':{'autoescape':False}})
我不确定上述附加代码中的environment_args
和autoescape
是否需要单引号。随意尝试不同的变体。
如果您想将autoescape True
保留为默认设置,则只需将|safe
添加到模板中的每个变量即可。
例如在home.html
{{ lang.text_title }}
变为
{{ lang.text_title|safe }}
依旧......