2011-03-25 8 views
9

Bien, aquí está mi situación. Tengo una matriz de objetos genéricos que estoy iterando en una plantilla django. Esos objetos tienen varias subclases y quiero descubrir en la plantilla con qué subclase estoy tratando. es posible? ¿Aconsejable?Tipo de objeto de plantilla Django

El código podría ser algo en la línea de (donde el caso de declaraciones incluyen una sintaxis imaginaria):

<table> 
    <tr> 
     <th>name</th> 
     <th>home</th> 
    </tr> 
    {% for beer in fridge %} 
    <tr> 
     <td> 
     {{ beer.name }} 
     </td> 
     <td> 
      {% if beer is instance of domestic %}US of A{% endif %} 
      {% if beer is instance of import %}Somewhere else{% endif %} 
     </td> 
    </tr> 
    {% endfor %} 
</table> 

Respuesta

21

Esta es una vieja pregunta, pero FWIW puede hacer esto con un filtro de plantilla.

@register.filter 
def classname(obj): 
    return obj.__class__.__name__ 

Luego, en su plantilla que puede hacer:

{% with beer|classname as modelclass %} 
{% if modelclass == "Domestic" %}US of A 
{% elif modelclass == "Import" %}Somewhere else 
{% endif %} 
{% endwith %} 
+0

Cómo agregar un filtro personalizado: https://docs.djangoproject.com/en/stable/howto/custom-template-tags/ – clonejo

8

Vas a tener que hacerlo a través de algún tipo de método. ¿Por qué no simplemente escribir un método como display_location() o algo similar en el modelo y hacer que devuelva la cadena que se procesa allí? Entonces podría simplemente poner {{ beer.display_location }} en su plantilla.

O si quieres volverte realmente loco, escribe una etiqueta de plantilla personalizada que haga lo que quieras, pero eso es mucho más trabajo.

Cuestiones relacionadas