def index(): form = SearchForm() form.next.data = url_for('.index') form.author.choices = [(str(u.id), u.username) for u in User.query .join(Usergroup) .filter(Usergroup.is_uploader) .filter(User.group_id == Usergroup.id) .all()] form.author.choices.insert(0, ('', 'Select')) form.broad_category.choices = [(str(c.id), c.name) for c in BroadCategory.query.all()] form.broad_category.choices.insert(0, ('', 'Select')) form.narrow_category.choices = [(str(c.id), c.name) for c in NarrowCategory.query.all()] form.narrow_category.choices.insert(0, ('', 'Select')) if form.validate_on_submit(): _params = { 'exclude_locked': form.exclude_locked.data } if len(form.keyword.data) > 0: _params['keyword'] = form.keyword.data if len(form.author.data) > 0: _params['author'] = form.author.data if len(form.broad_category.data) > 0: _params['broad_category'] = form.broad_category.data if len(form.narrow_category.data) > 0: _params['narrow_category'] = form.narrow_category.data return redirect(url_for('.result', _params=_params)) return render_template('search/index.html', form=form, title="Search files")
def result(page=1): _keyword = request.form.get('keyword') _authors = request.form.get('authors') _broad_cats = request.form.get('broad_cats') _narrow_cats = request.form.get('narrow_cats') _exclude_locked = request.form.get('exclude_locked') files = File.query if _keyword and len(_keyword) > 0: _likeword = likeable(_keyword) files = files.filter((File.name.ilike(_likeword)) | (File.description.ilike(_likeword))) if _authors and len(_authors) > 0: files = files.filter(File.author_id.in_(_authors)) if _broad_cats and len(_broad_cats) > 0: files = files.filter(File.broad_category_id.in_(_broad_cats)) if _narrow_cats and len(_narrow_cats) > 0: files = files.filter(File.narrow_category_id.in_(_narrow_cats)) if _exclude_locked: files = files.filter(not File.is_locked) if len(files.all()) == 0: flash('No results were found. Please adjust your parameters and try again') return redirect(url_for('.index')) else: files = files.paginate(page, current_app.config['RESULTS_PER_PAGE'], False) return render_template('search/search_result.html', results=files, title="Search results")