Alright, here's my situation. I've got an array of generic objects that I'm iterating over in a django template. Those objects have a number of subclasses and I want to figure out in the template which subclass I'm dealing with. Is this possible? Advisable?
The code might look something along the lines of (where the if statements include some imaginary syntax):
<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>
&l开发者_C百科t;/tr>
{% endfor %}
</table>
This is an old question, but FWIW you can do this with a template filter.
@register.filter
def classname(obj):
return obj.__class__.__name__
Then in your template you can do:
{% with beer|classname as modelclass %}
{% if modelclass == "Domestic" %}US of A
{% elif modelclass == "Import" %}Somewhere else
{% endif %}
{% endwith %}
You'll have to do it via some sort of method. Why not just write a method like display_location()
or something on the model itself and have it return the string which gets rendered there? Then you could just put {{ beer.display_location }}
in your template.
Or if you want to go really crazy, write a custom template tag that does what you want, but that's much more work.
精彩评论