def list_packages(request, query=None, Model=None, field=None, provider=None, distribution=None, architecture=None, branch=None, section=None): repo_values = [provider, distribution, architecture, branch, section] view_name = resolve(request.path_info).url_name api_view_name = view_name + '_api' searched = False filtered = False #Are we called by a search query? How do we fill the search form?: if request.method == 'POST': #We are called by a request after the form was filled searchform = SearchForm(request.POST) if searchform.is_valid(): search_elt = searchform.cleaned_data['search_elt'] #search_value = searchform.cleaned_data['search_value'].strip().strip('/') search_value = searchform.cleaned_data['search_value'].strip() #search_value = urlquote(searchform.cleaned_data['search_value'].strip()) search_values = search_value.split('/') #for index, elt in enumerate(search_values): # search_values[index] = urlquote(elt) if len(search_values) and search_elt !='nothing': search_values.append('') url_elts = ['/', DOC4_BASE_URL, 'packages', search_elt] url_elts.extend(search_values) #redirect_url = os.path.join(*url_elts) redirect_url = '/'.join(url_elts) else: #redirect_url = os.path.join( '/', DOC4_BASE_URL, 'packages') redirect_url = os.path.join( '/', DOC4_BASE_URL) get_elts = request.GET.copy() for key, value in get_elts.items(): if not len(value): get_elts.pop(key) if get_elts.has_key('page'): get_elts.pop('page') get_dict = get_elts.urlencode() if get_dict: redirect_url = '%s?%s' % (redirect_url, get_dict) return HttpResponseRedirect(redirect_url) else: search_elt = '' search_value = '' #We are called by a GET request if field in form_fields: search_elt = field if search_elt == 'log': search_elt = 'changelog' elif search_elt == 'name' and Model is File: search_elt = 'file' else: search_elt = 'name' if query: search_value = query elif repo_values.count(None) < len(repo_values): for index, value in enumerate(repo_values): if value is None: repo_values[index] = '' search_value = '/'.join(repo_values) search_elt = 'repository' searchform = SearchForm(initial={'search_elt' : search_elt, 'search_value' : search_value}) #Now fill the filter forms: filterform, filtersuggest = get_filters(request) #Get package_list: package_list = get_package_list(request, query, Model, field, provider, distribution, architecture, branch, section) total_packages_unfiltered = package_list.count() package_list = filter_by_repos_and_arch(request, package_list) package_list = filter_by_categories(request, package_list) #What categories do the packages list belong to: if field is not None and field == 'category': category, sub_categories = Category.get_categories(package_list, query) else: category, sub_categories = Category.get_categories(package_list) #Paginate output: paginator, packages = paginate(request, package_list, 25) total_packages = paginator.object_list.count() displayed_packages = packages.object_list.count() if total_packages < total_packages_unfiltered: filtered = total_packages_unfiltered - total_packages extra_context = { 'filterform' : filterform, 'filtersuggest' : filtersuggest, 'searchform' : searchform, 'packages' : packages, 'total_packages' : total_packages, 'total_packages_unfiltered' : total_packages_unfiltered, 'displayed_packages' : displayed_packages, 'category' : category, 'sub_categories' : sub_categories, 'searched' : searched, 'filtered' : filtered, 'view_name' : view_name, 'api_view_name' : api_view_name, } return object_list(request, queryset = package_list, extra_context = extra_context )