このガイドを参照として使用して、 TWIGの set 構文に適用される Django テンプレート用の set タグ パーサーを作成しました。
{% set someVar %} variableAssignment {% endset %}
私はテンプレート システムに Django のみを使用しており、この時点までは正しいインポートを使用してテンプレートを正しく表示することができました。ここに私が現在持っているコードがあります:
from django.template import Context, Template, Library, Node, TemplateSyntaxError, Variable, VariableDoesNotExist, resolve_variable
from django.template.loader import *
from django.conf import settings
settings.configure(TEMPLATE_DIRS="/my/templates")
register = Library()
class SetValueNode(Node):
def __init__(self, variable, nodelist):
self.variable = variable
self.nodelist = nodelist
def render(self, context):
context[self.variable] = self.nodelist.render(context)
return ""
@register.tag(name="set")
def set_tag(parser, token):
print "set_tag called: parser",parser," token",token
nodelist = parser.parse(("endset",))
parser.delete_first_token()
return SetValueNode(arg, nodelist)
def sendServiceEmail(username, first, last, service, service_tuple):
TEMPLATES_DIR = "/my/templates/"
emailStr = "myemail.html.twig"
print "Opening file :"+TEMPLATES_DIR+emailStr
t = Template(fp.read())
fp.close()
c = Context({
/*Add context from parameters*/
})
msg = t.render(c)
print msg
しかし、私が得るエラーは次のとおりです。
django.template.base.TemplateSyntaxError: 'set_tag' is not a valid tag library: Template library set_tag not found, tried django.templatetags.set_tag
いくつかの調査を行ってしばらく考えた後、django が検索しているライブラリは「標準」ライブラリのようです。誰か (django 設定、テンプレート、または .render) に「ライブラリ」を使用してもらい、ライブラリをチェックしてテンプレートタグが登録されているかどうかを確認する必要があると思います。Djangoアプリを作成せずに、この情報をDjangoに渡す方法はありますか?