Haystack 검색 결과 : page.object_list의 다른 모델에 다른 템플릿을 사용하는 방법?

StackOverflow https://stackoverflow.com/questions/1460543

문제

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- 디스플레이의 모델 클래스 이름의 더 예쁜 버전.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top