Тип объекта шаблона Django - PullRequest
12 голосов
/ 25 марта 2011

Хорошо, вот моя ситуация.У меня есть массив общих объектов, которые я перебираю в шаблоне django.Эти объекты имеют несколько подклассов, и я хочу выяснить в шаблоне, с каким подклассом я имею дело.Это возможно?Рекомендуется?

Код может выглядеть примерно так (где операторы if включают некоторый воображаемый синтаксис):

<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>

Ответы [ 2 ]

24 голосов
/ 03 октября 2012

Это старый вопрос, но FWIW вы можете сделать это с помощью шаблона шаблона.

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

Тогда в вашем шаблоне вы можете сделать:

{% with beer|classname as modelclass %}
{% if modelclass == "Domestic" %}US of A
{% elif modelclass == "Import" %}Somewhere else
{% endif %}
{% endwith %}
8 голосов
/ 25 марта 2011

Вы должны будете сделать это каким-то способом.Почему бы просто не написать метод, подобный display_location() или что-то в самой модели, и заставить его вернуть строку, отображаемую там?Тогда вы могли бы просто вставить {{ beer.display_location }} в свой шаблон.

Или, если вы хотите сойти с ума, напишите пользовательский тег шаблона, который делает то, что вы хотите, но это гораздо больше работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...