2011-07-04 9 views

Respuesta

48

object.__class__.__name__ o object._meta.object_name debería darle el nombre de la clase de modelo. Sin embargo, este no se puede usar en las plantillas porque los nombres de los atributos comienzan con un guión bajo.

No existe un modo integrado para obtener ese valor de las plantillas, por lo que deberá definir un método modelo que devuelva ese atributo o, para una solución más genérica/reutilizable, usar un filtro de plantilla:

@register.filter 
def to_class_name(value): 
    return value.__class__.__name__ 

que se puede utilizar en su plantilla como:

{{ obj | to_class_name }} 
+0

Ok .. Gracias Shawn como reply.I utiliza de esta manera, el pensamiento puede haber alguna manera integrada! ! – Neo

+0

No creo que su necesidad sea lo suficientemente común para garantizar un enfoque integrado. Si lo necesita con la suficiente frecuencia, puede crear una clase abstracta que implemente el método y luego usarlo como base para todos sus modelos. Personalmente, me limitaría a usar una etiqueta de filtro. –

+0

Ok..Gracias, Shawn. – Neo

5

no se puede acceder al nombre de la clase directamente. Hacer algo como esto:

{{ object.__class__ }} 

causará una TemplateSyntaxError: Variables and attributes may not begin with underscores. Django no le permite acceder a ese tipo de atributos: las convenciones de Python significan que son detalles de implementación ocultos, no parte de la API del objeto.

Crear un filtro de plantilla en su lugar, y luego se puede usar de la siguiente manera:

{{ object|model_name_filter }} 

Creación de filtros es muy fácil: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

-1

Desde la versión 1.2 y pueden ser temprano Django tiene un atributo opts en plantillas. El atributo es un enlace a model._meta Para evidencia que debe look at source code into Github

Se utiliza en la plantilla muy simple: {{opts}} o {{opts.db_table}}

+3

Eso es solo para django-admin. –

Cuestiones relacionadas