以下のように定義されたrender_to_responseを介して、djangoでjinj2テンプレートを使用できます
django.confのインポート設定から
from django.core.exceptions import ImproperlyConfigured
django.http から HttpResponse をインポート
from django.template import TemplateDoesNotExist, Context
django.utilsインポート翻訳から
itertools インポート チェーンから
jinja2インポートFileSystemLoader、環境から
jinja2インポートノードから
from jinja2.ext import 拡張機能
django.confのインポート設定から
jinja_filters を jf としてインポート
トレースバックのインポート
django.utils.translation から gettext、ngettext をインポート
クラス DjangoTranslator(オブジェクト):
def __init__(自己):
self.gettext = gettext
self.ngettext = ngettext
クラス DjangoEnvironment(環境):
def get_translator (自己、コンテキスト):
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)
return 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$""") multiple_re = re.compile(r"""^\s*plural$""") constant_re = re.compile(r"""_\(((?:".*?")|(?:'.*?'))\)""")
翻訳文字列を抽出するために jinja2 テンプレートでローカルで使用するために翻訳タグの正規表現を書き換えて makemessages.py を変更するよりも良い方法はありますか?