11年前にもやっている
のだが、この方法ではいつの間にか動かなくなっていたので、ソースを読んで対策を講じてみた。
Engineというものを作ってやって、そのbuildinsに追加すれば良いらしい。
from django.template.engine import Engine
engine = Engine.get_default()
engine.template_builtins.append(register)
そして、Engineを指定して、Templateを作る。
Template(templateStr, engine=engine).render(Context(d0))
うむ、面倒だ。APIで公開されている方法でもないので、いつ変わるかわからないし。。もっと使いやすいテンプレートエンジンに移行すべきなのか。
コードの全体。
import os
os.environ["DJANGO_SETTINGS_MODULE"]="djangoSettings"
from django.template import Template, Context
from django import template
import django
register = template.Library()
@register.filter
def texEscape(value):
return value.replace("&", "\\&")
templateStr="""{% autoescape off %} {{ item|texEscape }}{% endautoescape %}"""
d0 ={"item":"&teststring"}
from django.template.engine import Engine
engine = Engine.get_default()
engine.template_builtins.append(register)
Template(templateStr, engine=engine).render(Context(d0))
結果は
' \\&teststring'