Отобразить пользовательский вид Django в шаблонах - PullRequest
0 голосов
/ 09 мая 2019

Я настраиваю проект Django с функциями поиска, используя Django-Haystack и Elasticsearch, и моя цель очень проста: дать случайный процент совпадений в результатах поиска на основе порядка упорядоченного списка.

Недавно мне было предложено использовать следующий код для реализации совпадающих оценок и отображения их в шаблонах, но я не могу найти способ, чтобы они отображались в шаблонах.

Предлагаемый пользовательский defs в Views.py:

def random_search_match_percentages(array):
    from random import random
    from math import floor

    index = 0
    results = []

    for element in array:
        # define a maximum and a minimum range
        maximum = 100 - index if index <= 100 else 0
        minimum = maximum - 5 if maximum > 0 else 0

        num = floor(random() * (maximum - minimum) + minimum + 0.5)
        element.match = '{}%'.format(num)  # add the match param
        results.append(element)

        # decrease the maximum and minimum for the next iteration
        index += 5

    return results


def MatchingScore(request):
    some_data = Product.objects.all()  # just an example of grabbing data...
    paginator = Paginator(some_data, per_page=20)
    page_obj = paginator.get_page(page)

    results = random_search_match_percentages(page_obj)

    return render(request, 'search_result.html', {'results': results})

Но у меня уже есть этот пользовательский вид для object_name и Pagination, так что, возможно, я мог бы сделать отступ для этих двух предложенных def?

from haystack.generic_views import FacetedSearchView as BaseFacetedSearchView
from .forms import FacetedProductSearchForm

class FacetedSearchView(BaseFacetedSearchView):

    form_class = FacetedProductSearchForm
    facet_fields = ['ptags']
    template_name = 'search_result.html'
    paginate_by = 20
    context_object_name = 'object_list'

И цель состоит в том, чтобы отобразить соответствующие результаты в search_result.html, который в настоящее время выглядит следующим образом:

  <div>
{% if  page_obj.object_list %}
                <ol class="row top20" id="my_list">

        {% for result in page_obj.object_list %}

<li class="list-item">
   <div class="showcase col-sm-6 col-md-4">
           <a href="{{ result.object.get_absolute_url }}">
              <h3>{{result.object.title}}</h3>
          <h5>{{ result.object.destination }}</h5>

<!--  Matching scores to be displayed within the tag below  -->

       {% if results|length %}
          {% for res in results %}
          <p>{{ result.object.res.match }}</p>
          {% endfor %}
       {% endif %}

                <img src="{{ result.object.image }}" class="img-responsive">
           </a>

   </div>
</li>
                  {% endfor %}
                </ol>
            </div>

        {% else %}
        <p> Sorry, no result found for the search term  <strong>{{query}} </strong></p>
    {% endif %}
    </div>

Проблема в том, что сейчас ни одна из оценок не отображается ..

Есть мысли о том, как отображать оценки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...