Haystack 검색 결과 : page.object_list의 다른 모델에 다른 템플릿을 사용하는 방법?
-
12-09-2019 - |
문제
Solr 백엔드와 함께 Haystack을 사용하여 기존 Django 사이트에 검색을 추가하고 있습니다. 검색이 여러 가지 다른 모델에서 작동하고 단일 결과를 반환하기를 원합니다.
결과를 반복 할 때는 모델 유형에 따라 각 결과를 포맷하고 싶습니다. 예를 들어 결과가 Apple 인 경우 하나의 결과 템플릿을 사용하지만 주황색 인 경우 다른 템플릿을 사용하십시오.
지금까지 나는 약간 수정 된 예제를 사용하고 있습니다. 검색 템플릿. 템플릿에서 결과는 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
) 그것을 식별하기 위해서는, 그것은 우연히 보입니다. 나는 이것이 사용자 정의 템플릿 태그로 수행 될 수 있지만, 그것들에 대한 경험은 없습니다.
해결책
좋아요, 이렇게 물어 본 직후에 나는 더 깊이 파고 들었습니다. 건초 더미 문서, 내가 필요한 것을 정확히 찾았습니다.
{% ifequal result.model_name 'apple' %}
Apple: {{ result.object.titlefield_for_apple }}
{% else %}
Orange: {{ result.object.otherfield_for_orange }}
{% endifequal %}
물론 건초 더미는 결과와 함께 유형을 다시 전달해야하기 때문에 완전히 의미가 있습니다. 실제로 템플릿에서 쉽게 사용할 수 있도록 여러 버전의 유형 정보를 전달합니다.
- Model_Name- 모델의 이름입니다.
- 모델 - 모델 클래스.
- Verbose_name- 디스플레이의 모델 클래스 이름의 더 예쁜 버전.
제휴하지 않습니다 StackOverflow