我可以通过如下定义的render_to_response将jinj2模板与django一起使用
从 django.conf 导入设置
从 django.core.exceptions 导入 ImproperlyConfigured
从 django.http 导入 HttpResponse
从 django.template 导入 TemplateDoesNotExist,上下文
from django.utils 导入翻译
从 itertools 导入链
从 jinja2 导入 FileSystemLoader,环境
从 jinja2 导入节点
从 jinja2.ext 导入扩展
从 django.conf 导入设置
将 jinja_filters 导入为 jf
导入回溯
从 django.utils.translation 导入 gettext,ngettext
类 DjangoTranslator(对象):
def __init__(self):
self.gettext = 获取文本
self.ngettext = ngettext
类 DjangoEnvironment(环境):
def get_translator(self, context):
返回 DjangoTranslator()
template_dirs = getattr(设置,'TEMPLATE_DIRS')
default_mimetype = getattr(设置,'DEFAULT_CONTENT_TYPE')
global_exts = getattr(设置,'JINJA_EXTENSIONS',())
env = DjangoEnvironment(autoescape=False, loader=FileSystemLoader(template_dirs, encoding="utf-8"), extensions=global_exts)
env.filters.update({'myescape':jf.myescape})
如果 global_exts 中的“jinja2.ext.i18n”:
env.install_gettext_translations(翻译)
def render_to_response(filename, context={}, context_instance=Context({}), mimetype=default_mimetype):
模板 = env.get_template(文件名)
对于 context_instance.dicts 中的 d:
context.update(d)
context.update({'settings':settings})
渲染 = template.render(**context)
返回 HttpResponse(渲染,mimetype=mimetype)
但不能让 django 为 jinja2 模板提取翻译字符串。
似乎 django/utils/translation/trans_real.py 中的以下行使 makemessages 命令可以通过 templatize@trans_real.py 解析 i18n 的 django 模板
inline_re = re.compile(r"""^\s*trans\s+((?:".*?")|(?:'.*?'))\s*""") block_re = re.compile(r"""^\s*blocktrans(?:\s+|$)""") endblock_re = re.compile(r"""^\s*endblocktrans$""") 复数re = re.compile(r"""^\s*plural$""") constant_re = re.compile(r"""_\(((?:".*?")|(?:'.*?'))\)""")
有没有比修改 makemessages.py 更好的方法,通过重写翻译标签正则表达式以在 jinja2 模板上本地使用以提取翻译字符串?