开发者

Django template object type

开发者 https://www.devze.com 2023-02-20 04:39 出处:网络
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 whi

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消