search.py
40 lines
| 1.2 KiB
| text/x-python
|
PythonLexer
neko259
|
r718 | from django.shortcuts import render | |
from django.template import RequestContext | |||
from django.views.generic import View | |||
from haystack.query import SearchQuerySet | |||
from boards.abstracts.paginator import get_paginator | |||
from boards.forms import SearchForm, PlainErrorList | |||
neko259
|
r721 | FORM_QUERY = 'query' | |
CONTEXT_QUERY = 'query' | |||
CONTEXT_FORM = 'form' | |||
CONTEXT_PAGE = 'page' | |||
REQUEST_PAGE = 'page' | |||
neko259
|
r718 | __author__ = 'neko259' | |
TEMPLATE = 'search/search.html' | |||
class BoardSearchView(View): | |||
def get(self, request): | |||
context = RequestContext(request) | |||
form = SearchForm(request.GET, error_class=PlainErrorList) | |||
neko259
|
r721 | context[CONTEXT_FORM] = form | |
neko259
|
r718 | ||
if form.is_valid(): | |||
neko259
|
r721 | query = form.cleaned_data[FORM_QUERY] | |
neko259
|
r718 | if len(query) >= 3: | |
results = SearchQuerySet().auto_query(query).order_by('-id') \ | |||
.highlight() | |||
paginator = get_paginator(results, 10) | |||
neko259
|
r721 | if REQUEST_PAGE in request.GET: | |
page = int(request.GET[REQUEST_PAGE]) | |||
neko259
|
r718 | else: | |
page = 1 | |||
neko259
|
r721 | context[CONTEXT_PAGE] = paginator.page(page) | |
context[CONTEXT_QUERY] = query | |||
neko259
|
r718 | ||
return render(request, TEMPLATE, context) |