Heuhaufen-Suchergebnisse:wie verwenden Sie verschiedene Vorlagen für unterschiedliche Modelle in der Seite.object_list?

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

Frage

Ich Suche hinzufügen, um eine vorhandene Django-site, mit Heuhaufen mit einer Solr-backend.Ich möchte, dass meine Suche nach Arbeit in mehrere verschiedene Modelle, und wieder einen einzelnen Satz von Ergebnissen.

Bei der Iteration über die Ergebnisse, ich würde wie zu formatieren jedes Ergebnis basiert auf dem, was Modell Typ es ist-z.B.wenn das Ergebnis ist ein Apfel, verwenden Sie eine Ergebnis-Vorlage, aber wenn es eine Orange, eine andere Vorlage verwendet werden.

So weit, ich bin nur mit einem leicht modifizierte version des Beispiel Suche Vorlage.In der Vorlage, die Ergebnisse kommen in der Seite.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 %}

Dies funktioniert nicht, anscheinend, weil isinstance() ist nicht verfügbar inside eine Vorlage.Also, wie kann ich control template-Logik auf der Grundlage der Modell Typ eines Objekts?Gibt es eine andere Funktion, die ich verwenden kann, innerhalb einer Vorlage, die nicht die gleiche Sache?

Ich nehme an, ich könnte testen Sie verschiedene Felder des Objekts (if result.object.otherfield_for_orange), um ihn zu identifizieren, aber das scheint unelegant.Ich Wette, dies könnte getan werden, mit benutzerdefinierten Vorlagen-tags, aber ich habe keine Erfahrung mit denen.

War es hilfreich?

Lösung

Ok, duh, sofort nach Fragen, das ich grub tiefer in der Heuhaufen docs, und fand genau, was ich brauche:

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

Das macht Total Sinn, weil natürlich Heuhaufen passieren sollte dem Typen zurück mit den Ergebnissen.Eigentlich es gibt einige Versionen des Typs info, für die einfache Verwendung in der Vorlage:

  • Modellname - Modell-Namen.
  • Modell - Modell-Klasse.
  • verbose_name - Eine schönere version des Modells s-Klasse Namen für die Anzeige.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top