2021年5月19日水曜日

djangoのtemplateをスタンドアロンで使う際にfilterを登録する方法

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'

0 件のコメント: