В настоящее время я настраиваю свой проект Django, который является поисковой системой, и я пытался установить связь между пользовательским представлением Django и функцией Javascript, но у меня продолжали возникать проблемы, поэтому я решил перезапустить это сначало и, надеюсь, получить чью-то помощь.
У меня есть этот код Javascript
const data = [] // Not sure how to get the data from the backend??
let index = 0;
let results = [];
const randomSearchMatchPercentages = ( array ) => {
for ( const element of array ) {
// define a maximum and a minimum range
const maximum = index <= 100 ? 100 - index : 0;
const minimum = maximum > 0 ? maximum - 5 : 0;
element.match = Math.round( Math.random() * ( maximum - minimum ) + minimum ) + "%";
results.push( element );
// decrease the maximum and minimum for the next iteration
index += 5;
}
console.log( results );
}
randomSearchMatchPercentages( data );
, который мне нужно подключить с помощью пользовательского вида, например:
def MatchingScore(request):
return JsonResponse(output)
У меняустановил соединение и получил данные из бэкэнда для моего автозаполнения с помощью этого представления:
def autocomplete(request):
sqs = SearchQuerySet().autocomplete(
content_auto=request.GET.get('query',''))[:5]
destinations = {result.destination for result in sqs}
s = [{"value": dest, "data": dest} for dest in destinations]
output = {'suggestions': s}
return JsonResponse(output)
И с помощью этой функции Javascript:
$(function () {
'use strict';
$('#q').autocomplete({
serviceUrl: "http://127.0.0.1:8000/search/autocomplete/",
minChars: 2,
dataType: 'json',
type: 'GET',
onSelect: function (suggestion) {
console.log( suggestion.value + ', data :' + suggestion.data);
}
});
});
Но я не знаю, какой кодположить внутрь моего def MatchingScore
и как адаптировать код Javascript, чтобы он работал.Я предполагаю, что мне нужно будет получить данные из моей базы данных так же, как мой autocomplete View
и передать их в функцию javascript.
Моя цель очень проста: генерировать случайное число от 100 до 0%и отобразить его в список HTML, который выглядит следующим образом:
<div>
{% if page_obj.object_list %}
<ol class="row top20">
{% 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>
<img src="{{ result.object.image }}" class="img-responsive">
</a>
</div>
<li>
{% endfor %}
</ol>
</div>
{% else %}
<p> Sorry, no result found </p>
{% endif %}
Как я могу это сделать?
РЕДАКТИРОВАТЬ:
У меня есть этоПользовательский файл forms.py, который я использую с Django-Haystack для функций поиска:
from haystack.forms import FacetedSearchForm
class FacetedProductSearchForm(FacetedSearchForm):
def __init__(self, *args, **kwargs):
data = dict(kwargs.get("data", []))
self.ptag = data.get('ptags', [])
super(FacetedProductSearchForm, self).__init__(*args, **kwargs)
def search(self):
sqs = super(FacetedProductSearchForm, self).search()
if self.ptag:
query = None
for ptags in self.ptag:
if query:
query += u' OR '
else:
query = u''
query += u'"%s"' % sqs.query.clean(ptags)
sqs = sqs.narrow(u'ptags_exact:%s' % query)
return sqs
Затем я передаю пользовательскую форму в свои представления с этим классом:
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'
I 'Мы попробовали первый подход, но я не получил никаких результатов поиска, и так как у меня уже есть pagination
и object_name
, есть ли способ реализовать как def MatchingScore
, так и def random_search_match_percentages
в этом классе с помощьюсделать отступ или что-то еще, чтобы я мог вызвать match
внутри этого тега шаблона?:
{% if page_obj.object_list %}
{% for result in page_obj.object_list %}
{% endfor %}
{% else %}
{% endif %}