41 lines
2.6 KiB
Python
Executable File
41 lines
2.6 KiB
Python
Executable File
# -*- coding: utf-8 -*-
|
|
"""This small application will search sentences in the database. Database has been filled previously with data from the Tatoeba project."""
|
|
from __future__ import unicode_literals
|
|
from django.shortcuts import render
|
|
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
|
from .models import phrase
|
|
from .forms import SearchForm
|
|
|
|
# Language dictionary. Keys should be language codes (ISO 639-3) (eng for english, spa for spanish, rus for russian and so on)
|
|
# value should be the language as will be used to generate text to speech responses in the response.js library
|
|
# (English, Russian, Spanish Latin American, etc).
|
|
# Obviously, there should be phrases already loaded in the database for all of the following languages.
|
|
languages = dict(eng="English", rus="Russian", spa="Spanish Latin American")
|
|
|
|
def index(request):
|
|
""" Index method. From this method the search of sentences is processed, though if user didn't want to search anything we will show some informative page here."""
|
|
will_search = False
|
|
search_term = request.GET.get("search_term")
|
|
language = request.GET.get("language")
|
|
if search_term != None:
|
|
will_search = True
|
|
# prefill the form with search_term and language just in case these values are different than None.
|
|
# It is useful so users will see the same data in their form even when the page has been reloaded due to a submit.
|
|
# if these values are None, the form will be blank.
|
|
search_form = SearchForm(initial=dict(search_term=search_term, language=language))
|
|
if will_search == True:
|
|
# ToDo: perhaps should I look to implement an "exact" search expresion for search_term here?
|
|
posts = phrase.objects.filter(phrase__contains=search_term, language__exact=language)
|
|
paginator = Paginator(posts, 100)
|
|
# get page number from request args. If there is no page argument, then set page to 1.
|
|
page = request.GET.get('page')
|
|
if page == None: page = 1
|
|
posts = paginator.page(page)
|
|
# Add extra arguments (search_term and language) so other links will be loaded correctly in the paginator.
|
|
extra_params = ""
|
|
if search_term != None:
|
|
extra_params = "&search_term={0}&language={1}".format(search_term, language)
|
|
if will_search:
|
|
return render(request, 'sentence_finder/index.html', dict(posts=posts, search_form=search_form, extra_params=extra_params, lang=languages.get(language)))
|
|
else:
|
|
return render(request, 'sentence_finder/index.html', dict(total=phrase.objects.count(), search_form=search_form)) |