Я настраиваю проект 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>
Проблема в том, что сейчас ни одна из оценок не отображается ..
Есть мысли о том, как отображать оценки?