10

我正在尝试使用 Google App Engine 创建 Django 自定义标签,但由于某种原因,它并不总是有效。我相信我的标签已正确注册,因为 Django 正在解析它们,但渲染方法从未被调用。最奇怪的是,我的标签放在 for 循环 {% for ... %} 内时有效,但从不在外面。

这是代码:

在 django/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 回答