2011-07-04 4 views
31

django 템플릿에있는 객체의 모델 이름을 가져 오는 방법이 있습니까? 수동으로 모델에서 메소드를 정의하거나 템플릿 태그를 사용하여 테스트 해 볼 수 있습니다 ... 그러나 내장 된 방법이 있습니까?django 템플릿에있는 객체의 모델 이름

답변

48

object.__class__.__name__ 또는 object._meta.object_name은 모델 클래스의 이름을 제공해야합니다. 그러나이 은 템플릿 이름이 밑줄로 시작하기 때문에 템플릿에서 사용할 수 없습니다.

템플릿에서 해당 값을 가져 오는 기본 방법이 없으므로 해당 특성을 반환하는 모델 메서드를 정의하거나보다 일반적인/재사용 가능한 솔루션의 경우 템플릿 필터를 사용해야합니다. 당신은 직접 클래스 이름을 액세스 할 수 없습니다

{{ obj | to_class_name }} 
+0

좋아 .. 감사합니다 reply.I에 대한 숀이 방법을 사용, 생각 몇 가지 기본 방법이 될 수 있습니다! ! – Neo

+0

필자는 내장형 접근 방식을 보증 할만큼 공통적이라고 생각하지 않습니다. 빈번히 필요한 경우,이 메소드를 구현하는 Abstract 클래스를 작성하여 모든 모델의 기본으로 사용할 수 있습니다. 개인적으로, 나는 필터 태그를 사용하는 것에 충실했습니다. –

+0

Ok .. Shawn 감사합니다. – Neo

5

:

@register.filter 
def to_class_name(value): 
    return value.__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/

-1

1.2 버전 이후와 장고에 속성 opts을 가지고 초기에있을 수 있습니다 템플릿. atribute 증거를 들어 model._meta 링크를 당신이해야 look at source code into Github 그것은 매우 간단한 템플릿에 사용

: {{opts}} 또는 {{opts.db_table}}

+3

이것은 장고 관리자에게만 해당됩니다. –