in kitsune/search/views.py [0:0]
def simple_search(request):
is_json = request.GET.get("format") == "json"
search_form = SimpleSearchForm(request.GET, auto_id=False)
if not search_form.is_valid():
if not is_json:
return render(request, "search/form.html", {"search_form": search_form})
return HttpResponse(
json.dumps({"error": _("Invalid search data.")}),
content_type="application/json",
status=400,
headers={"X-Robots-Tag": "noindex"},
)
cleaned = search_form.cleaned_data
# get language
language = locale_or_default(cleaned["language"] or request.LANGUAGE_CODE)
lang_name = settings.LANGUAGES_DICT.get(language.lower()) or ""
# get product and product titles
product, product_titles = _get_product_title(cleaned["product"])
# create search object
search = CompoundSearch()
# apply aaq/kb configs
if cleaned["w"] & constants.WHERE_WIKI:
search.add(WikiSearch(query=cleaned["q"], locale=language, product=product))
if cleaned["w"] & constants.WHERE_SUPPORT:
search.add(QuestionSearch(query=cleaned["q"], locale=language, product=product))
# execute search
page = paginate(
request,
search,
per_page=settings.SEARCH_RESULTS_PER_PAGE,
paginator_cls=SumoSearchPaginator,
)
total = search.total
results = search.results
# generate fallback results if necessary
fallback_results = None
if total == 0:
fallback_results = _fallback_results(request.user, language, cleaned["product"])
data = {
"num_results": total,
"results": results,
"fallback_results": fallback_results,
"product_titles": ", ".join(product_titles),
"q": cleaned["q"],
"w": cleaned["w"],
"lang_name": lang_name,
"products": Product.active.filter(visible=True),
}
if not is_json:
data.update(
{
"product": product,
"pages": page,
"search_form": search_form,
}
)
return render(request, "search/results.html", data)
# create results dictionary for instant search
data.update(
{
"total": total,
"products": [
{"slug": p.slug, "title": pgettext("DB: products.Product.title", p.title)}
for p in data["products"]
],
"pagination": _make_pagination(page),
}
)
if product:
data["product"] = product.slug
if not results:
data["message"] = constants.NO_MATCH
json_data = JSONRenderer().render(data)
return HttpResponse(
json_data, content_type="application/json", headers={"X-Robots-Tag": "noindex, nofollow"}
)