نتائج البحث عن كومة كومة: كيفية استخدام قوالب مختلفة لنماذج مختلفة في الصفحة.Object_List؟

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

سؤال

أقوم بإضافة البحث إلى موقع Django موجود، باستخدام كومة كومة مع Solr Backend. أريد أن يعمل بحثي عبر عدة نماذج مختلفة، وإرجاع مجموعة واحدة من النتائج.

عند التكرار من خلال النتائج، أود أن تنسق كل نتيجة بناء على نوع النموذج الذي هو - على سبيل المثال إذا كانت النتيجة تفاحة، استخدم قالب نموذج واحد، ولكن إذا كان برتقاليا، فاستخدم قالب مختلف.

حتى الآن، أنا فقط أستخدم نسخة معدلة قليلا من المثال قالب البحث. وبعد في القالب، تأتي النتائج في الصفحة.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) التعرف عليه، ولكن هذا يبدو ماعسا. أراهن أن هذا يمكن القيام به مع علامات قالب مخصصة، ولكن ليس لدي أي خبرة مع تلك.

هل كانت مفيدة؟

المحلول

حسنا، DUH، مباشرة بعد مطالبة هذا أنا حفرت أعمق في مستندات رفاقة, ، وجدت بالضبط ما أحتاج إليه:

{% 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