¿Hay alguna forma de obtener el nombre del modelo de cualquier objeto en las plantillas de django? Manualmente, podemos intentarlo definiendo métodos en modelos o usando etiquetas de plantilla ... ¿Pero hay alguna forma incorporada?Nombre del modelo de los objetos en las plantillas de django
Respuesta
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 }}
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/
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}}
Eso es solo para django-admin. –
- 1. ¿Cómo puedo obtener el conteo de objetos para un modelo en las plantillas de Django?
- 2. Captación de objetos del modelo heredado de Django
- 3. ¿Cómo introspeccionar los campos del modelo django?
- 4. bloques anidados en las plantillas de Django
- 5. Django acceder modelo de objetos ForeignKey
- 6. Uso de la configuración de Django en las plantillas
- 7. ¿Son posibles las consultas asíncronas del modelo de Django?
- 8. ¿Cómo se analizan las plantillas de django?
- 9. ¿Los objetos del modelo deben tener interfaces?
- 10. Personalizar la página de índice de administración de Django para mostrar los objetos del modelo
- 11. Creación masiva de objetos de modelo en django
- 12. las plantillas de Django: forloop.first y forloop.last
- 13. Django - objetos plantilla de acceso de nombre descriptivo
- 14. plural Django para las plantillas
- 15. Combinación de reagrupar con get_foo_display en las plantillas de Django
- 16. ¿Reutilizando plantillas de django?
- 17. Cómo obtener un objeto de modelo usando un cordón nombre del modelo en Django
- 18. Mismo campo, diferentes opciones en las subclases del modelo Django
- 19. Django-modelos Los objetos ForeignKey muestran el nombre del campo en lugar de los valores del objeto
- 20. ¿Cómo se modifican los argumentos de campo en las subclases del modelo de Django?
- 21. nombre del modelo al nombre del controlador
- 22. Detectando variables no definidas en las plantillas de Django
- 23. ¿Default_if_none no tiene ningún uso en las plantillas de Django?
- 24. campos del modelo dinámico Django
- 25. ¿Es posible cambiar el nombre del modelo en el sitio de administración de django?
- 26. Almacén de objetos para objetos en Django entre las solicitudes
- 27. Django - plantilla verbose_names modelo de pantalla y objetos
- 28. plantillas de Django escapar
- 29. Problema con la codificación en las plantillas de Django
- 30. cómo bucle de 7 veces en las plantillas de Django
Ok .. Gracias Shawn como reply.I utiliza de esta manera, el pensamiento puede haber alguna manera integrada! ! – Neo
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. –
Ok..Gracias, Shawn. – Neo