Google App Engine で Django カスタム タグを作成しようとしていますが、何らかの理由で常に機能しません。Django がタグを解析しているため、タグは正しく登録されていると思いますが、render メソッドが呼び出されることはありません。最も奇妙なことは、私のタグが for ループ {% for ... %} の内側に配置されたときに機能するが、外側には機能しないことです。
コードは次のとおりです。
ジャンゴ/mytags.pyで
from django import template
from google.appengine.ext import webapp
register = webapp.template.create_template_register()
# This works all the time
@register.simple_tag
def hello_world():
return u'Hello world'
@register.tag('foo')
def foo(parser, token):
return FooNode()
class FooNode(template.Node):
def __init__(self):
self.foo = 'foo'
def render(self, context):
return self.foo
main.py で
from google.appengine.ext.webapp import template
template.register_template_library('django.mytags')
...
self.response.out.write(template.render('main.html', template_values))
main.htmlで
{% foo %}
{% for item in items %}
{% foo %}
そして結果:
<django.mytags.FooNode object at 0x000000001794BAC8>
foo
foo
foo
...
これは私を狂わせています。タグを for ループに入れると、ノードが強制的にレンダリングされると思われます (既に行われているはずです)。