10

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 ループに入れると、ノードが強制的にレンダリングされると思われます (既に行われているはずです)。

4

2 に答える 2

1

クラスの文字列表現を追加する必要があります

class FooNode(template.Node):
    def __init__(self):
        self.foo = 'foo'

    def render(self, context):
        return self.foo

    def __unicode__(self):
        return 'string to put in template'
于 2013-01-24T11:38:12.850 に答える
0

追加するのを忘れていません{% load mytags %}か?(カスタム タグのドキュメントに従って、使用する必要があります)

于 2013-01-24T11:55:38.183 に答える