Djangoテンプレート内のオブジェクトのモデル名を取得する方法はありますか。手動で、モデル内のメソッドを定義するか、テンプレートタグを使用して、それを試すことができます...しかし、組み込みのものはありますか?仕方?
object.__class__.__name__
またはobject._meta.object_name
はモデルクラスの名前を与えるはずです。ただし、属性名はアンダースコアで始まるため、これはテンプレートでは使用できませんです。
テンプレートからその値を取得する組み込みの方法はないため、その属性を返すモデルメソッドを定義する必要があります。または、より汎用的で再利用可能なソリューションの場合は、テンプレートフィルターを使用します。
@register.filter
def to_class_name(value):
return value.__class__.__name__
テンプレートで次のように使用できます。
{{ obj | to_class_name }}
クラス名に直接アクセスすることはできません。このようなことをする:
{{ 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/
Djangoは_metaと呼ばれるモデルオプションにパブリックにアクセス可能なAPIを追加しましたが、テンプレートでアンダースコアを使用して変数にアクセスすることはできません。テンプレートフィルターを使用します。
@register.filter
def verbose_name(instance):
return instance._meta.verbose_name
テンプレート:
{{ instance|verbose_name }}
テンプレート内の単語を大文字にするためにtitle
フィルターをチェーンすることも好きです。
{{ instance|verbose_name|title }}