Я добавляю поиск на существующий сайт Django, используя Haystack с бэкэндом Solr. Я хочу, чтобы мой поиск работал по нескольким различным моделям и возвращал один набор результатов.
При переборе результатов я хотел бы отформатировать каждый результат в зависимости от того, какой это тип модели - например, если результат - Apple, используйте один шаблон результата, но если это Orange, используйте другой шаблон.
Пока что я просто использую слегка измененную версию примера шаблон поиска . В шаблоне результаты помещаются в page.object_list:
{% if page.object_list %}
<ul>
{% for result in page.object_list %}
<li>
{% if (isinstance(result.object, Apple)) %}
Apple: {{ result.object.titlefield_for_apple }}
{% else %}
Orange: {{ result.object.otherfield_for_orange }}
{% endif %}
</li>
{% endfor %}
</ul>
{% else %}
<p>No results found.</p>
{% endif %}
Это не работает, по-видимому, потому что isinstance () не доступен внутри шаблона. Итак, как я могу управлять логикой шаблона на основе типа модели объекта? Есть ли другая функция, которую я могу использовать внутри шаблона, которая делает то же самое?
Полагаю, я мог бы проверить различные поля объекта (if result.object.otherfield_for_orange
), чтобы идентифицировать его, но это выглядит не элегантно. Могу поспорить, что это можно сделать с помощью пользовательских тегов шаблонов, но у меня нет опыта с ними.