我传递给模板的对象具有一个名为active_children
的方法,该方法返回键为Python类(准确地说是Django模型)的键OrderedDict
,并为这些键的QuerySets应用了某些过滤器的模型。使用类作为Django模板中的键来迭代字典项目
我有类似的东西在模板中的以下内容:
{% for cls, objs in object.active_children.items %}
{{ cls }}
{% for obj in objs %}
{{ obj }}
{% endfor %}
{% endfor %}
这在与{{ cls }}
行返回错误Error during template rendering. coercing to Unicode: need string or buffer, NoneType found
。
但是,如果我改变了这一切本:
{{ object.active_children.items }}
然后,我没有得到一个错误,看到页面上的输出[(<class 'app.MyModel'>, [<MyModel:1>, <MyModel:2>, <MyModel:3>]), (<class 'app.AnotherModel'>, [])]
。证明课程关键的确不是无。
如果我从第一个示例中删除{{ cls }}
行,我也不会收到错误。然后查询集中的所有对象都被正确打印。
有没有一种方法,我仍然可以在Django模板中使用类作为字典键?
我正在使用Django 1.4.5/Python 2.7.3。
看来容易出错类没有一个'__unicode__' [方法](https://docs.djangoproject.com/en/dev/ref/unicode/#models) –
我不是肯定的是,如果这是你所需要的,但是你可以尝试: '{{cls | default_if_none:“”}}' – Luke
@HeddevanderHeide谢谢,但这会有帮助吗? 'unicode(Klass)'应该总是返回一个unicode字符串,即使这个类没有定义它。 Django是否专门查找'__unicode__'属性?虽然,我只是通过给所有类添加一个'__unicode__'方法来测试,并且仍然有相同的错误。 : -/ – imiric