1

テンプレートに渡すオブジェクトには、キーが Python クラス (正確には Django モデル) であり、特定のフィルターが適用されたこれらのモデルのクエリセットの値を返すactive_childrenというメソッドがあります。OrderedDict

テンプレートには次のようなものがあります。

{% 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__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 に答える