1

我传递给模板的一个对象有一个调用方法,该方法active_children返回一个OrderedDict其键是 Python 类(确切地说是 Django 模型)和应用了某些过滤器的那些模型的 QuerySets 值。

我在模板中有如下内容:

{% for cls, objs in object.active_children.items %}
    {{ cls }}
    {% for obj in objs %}
        {{ obj }}
    {% endfor %}
{% endfor %}

这将返回Error during template rendering. coercing to Unicode: need string or buffer, NoneType found带有{{ cls }}.

但是,如果我将所有这些更改为:

{{ object.active_children.items }}

然后我没有收到错误并[(<class 'app.MyModel'>, [<MyModel:1>, <MyModel:2>, <MyModel:3>]), (<class 'app.AnotherModel'>, [])]在页面上看到输出。证明类键确实不是 None。

{{ cls }}如果我从第一个示例中删除该行,我也不会收到错误消息。然后正确打印 QuerySet 中的所有对象。

有没有办法我仍然可以在 Django 模板中使用类作为字典键?

我正在使用 Django 1.4.5 / Python 2.7.3。

4

1 回答 1

0

django 模板引擎不能强制你的类使用 unicode,这就是为什么需要__unicode__or__str__方法,例如

class Foo(models.Model):
    attr = models.CharField(max_length=25)

    def __unicode__(self):
        return '{0}'.format(self.attr)  # instead of None
于 2013-10-04T12:33:29.317 回答