SolrバックエンドでHaystackを使用して、既存のDjangoサイトに検索を追加しています。検索を複数の異なるモデルで機能させ、単一の結果セットを返すようにします。
結果を繰り返すときは、モデルタイプに基づいて各結果をフォーマットしたいと思います。たとえば、結果がAppleの場合は、1つの結果テンプレートを使用しますが、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
)のさまざまなフィールドをテストして識別できると思いますが、それはエレガントではないようです。これはカスタムテンプレートタグで実行できると思いますが、私はそれらの経験がありません。