2011-07-04 18 views
31

djangoテンプレート内のオブジェクトのモデル名を取得する方法はありますか?手動で、モデルでメソッドを定義したり、テンプレートタグを使って試すことができます...しかし、組み込みの方法はありますか?djangoテンプレート内のオブジェクトのモデル名

答えて

48

object.__class__.__name__またはobject._meta.object_nameは、モデルクラスの名前を与える必要があります。ただし、このは、属性名がアンダースコアで始まるので、テンプレートでは使用できません。

テンプレートからその値を取得する方法が組み込まれていないため、その属性を返すモデルメソッドを定義するか、より一般的な/再利用可能なソリューションでテンプレートフィルタを使用する必要があります。

として、あなたのテンプレートで使用することができます
@register.filter 
def to_class_name(value): 
    return value.__class__.__name__ 

:あなたは直接クラス名にアクセスすることはできません

{{ obj | to_class_name }} 
+0

[OK]を..おかげreply.Iためのショーンは、この方法を使用し、思考は、いくつかの組み込みの方法かもしれません! ! – Neo

+0

私はそれが必要であるとは考えていませんが、組み込みのアプローチを保証するのに十分です。頻繁に必要な場合は、そのメソッドを実装する抽象クラスを作成し、それをすべてのモデルのベースとして使用できます。個人的には、私はフィルタータグの使用に固執します。 –

+0

Ok .. Shawnに感謝します。 – Neo

5

。次のような操作を行う:

{{ object.__class__ }} 

TemplateSyntaxError: Variables and attributes may not begin with underscoresが発生します。 Djangoはそれらの属性にアクセスすることはできません。Pythonの規約は、オブジェクトのAPIの一部ではなく、実装の詳細が隠されていることを意味します。

代わりに、テンプレートフィルタを作成し、次のようにあなたはそれを使用することができます。

{{ object|model_name_filter }} 

の作成フィルタは非常に簡単です:https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

-1

1.2バージョン以来とDjangoはに属性optsを持って早期かもしれテンプレート。 atributeは証拠についてmodel._metaへのリンクがあり、あなたがしなければならないlook at source code into Githubそれは非常に単純なテンプレートに使用

{{opts}}または{{opts.db_table}}

+3

これはdjango-admin専用です。 –

関連する問題