gpt4 book ai didi

django - Haystack 搜索结果 : how to use different templates for different models in page. object_list?

转载 作者:行者123 更新时间:2023-12-02 14:24:30 33 4
gpt4 key购买 nike

我正在使用 Haystack 和 Solr 后端向现有 Django 站点添加搜索。我希望我的搜索能够跨多个不同的模型运行,并返回一组结果。

在迭代结果时,我想根据每个结果的模型类型来格式化每个结果 - 例如如果结果是苹果,则使用一个结果模板,但如果结果是橙色,则使用不同的模板。

到目前为止,我只是使用示例 search template 的稍微修改版本。 。在模板中,结果出现在 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() 在模板内不可用。那么,如何根据对象的 Model 类型来控制模板逻辑呢?我可以在模板中使用另一个函数来执行相同的操作吗?

我想我可以测试对象的各个字段(if result.object.otherfield_for_orange)来识别它,但这看起来不太优雅。我打赌这可以通过自定义模板标签来完成,但我对此没有经验。

最佳答案

好吧,呃,在问完这个问题后,我立即深入研究了 Haystack docs ,并找到了我所需要的:

{% ifequal result.model_name 'apple' %}
Apple: {{ result.object.titlefield_for_apple }}
{% else %}
Orange: {{ result.object.otherfield_for_orange }}
{% endifequal %}

这完全有道理,因为 Haystack 当然应该将类型与结果一起传回。它实际上传递了多个版本的类型信息,以便于在模板中使用:

  • model_name - 模型的名称。
  • model - 模型类。
  • verbose_name - 用于显示的模型类名称的更漂亮版本。

关于django - Haystack 搜索结果 : how to use different templates for different models in page. object_list?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1460543/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com