def tag_search(request, klass, template): """Search subset of models with the given tag. Usess ``watson`` for the full-text search. """ # Generate a queryset from a model, manager or queryset: form = SearchForm(request.GET) page_no = pagination.get_page_no(request.GET) if form.is_valid(): queryset = get_queryset(klass) object_list = watson.search( form.cleaned_data['q'], models=(queryset, )) pagination_qs = '&%s' % urlencode({'q': form.cleaned_data['q']}) else: object_list = [] pagination_qs = '' page = pagination.get_page(object_list, page_no) page.object_list_top = [o.object for o in page.object_list_top] page.object_list_bottom = [o.object for o in page.object_list_bottom] context = { 'page': page, 'form': form, 'pagination_qs': pagination_qs, } return TemplateResponse(request, template, context)
def post_list(request): """List the published ``Posts``""" page_no = pagination.get_page_no(request.GET) featured_list = Post.published.select_related("author").filter(is_featured=True)[:3] object_list = Post.published.select_related("author").all() page = pagination.get_page(object_list, page_no, page_size=5) context = {"page": page, "featured_list": featured_list} return TemplateResponse(request, "blog/object_list.html", context)
def organization_list(request): page_no = pagination.get_page_no(request.GET) object_list = Organization.active.all() page = pagination.get_page(object_list, page_no) context = { 'page': page, } return TemplateResponse(request, 'organizations/object_list.html', context)
def resource_list(request): page_no = pagination.get_page_no(request.GET) object_list = Resource.published.all() page = pagination.get_page(object_list, page_no) context = { 'page': page, } return TemplateResponse(request, 'resources/object_list.html', context)
def event_list(request): page_no = pagination.get_page_no(request.GET) now = timezone.now() object_list = Event.published.filter(start_datetime__gte=now) page = pagination.get_page(object_list, page_no) context = { 'page': page, } return TemplateResponse(request, 'events/object_list.html', context)
def article_list(request, section=Article.DEFAULT): page_no = pagination.get_page_no(request.GET) kwargs = {'section': section} if section else {} object_list = Article.published.filter(**kwargs) page = pagination.get_page(object_list, page_no) context = { 'page': page, } return TemplateResponse(request, 'news/object_list.html', context)
def hub_list(request): """List al the available ``Hubs``.""" page_no = pagination.get_page_no(request.GET) object_list = Hub.active.all() page = pagination.get_page(object_list, page_no) context = { 'page': page, } return TemplateResponse(request, 'hubs/object_list.html', context)
def resource_list(request): page_no = pagination.get_page_no(request.GET) object_list = Resource.published.all() page = pagination.get_page(object_list, page_no) featured_list = Resource.published.filter(is_featured=True)[:3] context = { 'page': page, 'featured_list': featured_list, } return TemplateResponse(request, 'resources/object_list.html', context)
def challenge_list(request): page_no = pagination.get_page_no(request.GET) now = timezone.now() object_list = (Challenge.objects .filter(end_datetime__gte=now, status=Challenge.PUBLISHED) .order_by('start_datetime')) page = pagination.get_page(object_list, page_no) context = { 'page': page, } return TemplateResponse(request, 'challenges/object_list.html', context)
def hub_list(request): """List al the available ``Hubs``.""" page_no = pagination.get_page_no(request.GET) object_list = Hub.active.all() page = pagination.get_page(object_list, page_no) featured_list = Hub.active.filter(is_featured=True)[:3] context = { 'page': page, 'featured_list': featured_list, } return TemplateResponse(request, 'hubs/object_list.html', context)
def post_list(request, section=None): """List the published ``Posts``""" page_no = pagination.get_page_no(request.GET) query_kwargs = {'section': section} if section else {} featured_list = (Post.published.select_related('author') .filter(is_featured=True, **query_kwargs)[:3]) object_list = (Post.published.select_related('author') .filter(**query_kwargs)) page = pagination.get_page(object_list, page_no, page_size=5) context = { 'page': page, 'featured_list': featured_list, } return TemplateResponse(request, 'blog/object_list.html', context)
def event_list(request, timeframe='upcoming', section=None): page_no = pagination.get_page_no(request.GET) query_kwargs = get_timeframe_kwargs(timeframe) if section: query_kwargs['section'] = section object_list = Event.published.filter(**query_kwargs) page = pagination.get_page(object_list, page_no) featured_list = Event.published.filter( is_featured=True, **get_timeframe_kwargs('upcoming')) context = { 'page': page, 'timeframe': timeframe, 'featured_list': featured_list, } return TemplateResponse(request, 'events/object_list.html', context)
def app_list(request, domain=None): """Lists the published ``Applications``""" if domain: domain = get_object_or_404(Domain, slug=domain) extra_qs = {"domain": domain} if domain else {} page_no = pagination.get_page_no(request.GET) # Validate the domain is valid if provided: order_form = forms.OrderForm(request.GET, order_choices=APPS_SORTING_CHOICES) order_value = order_form.cleaned_data["order"] if order_form.is_valid() else "" object_list = Application.objects.filter(status=Application.PUBLISHED, **extra_qs) if order_value: object_list = object_list.order_by(order_value) page = pagination.get_page(object_list, page_no) context = {"page": page, "order": order_value, "order_form": order_form, "domain_list": Domain.objects.all()} return TemplateResponse(request, "apps/object_list.html", context)
def profile_list(request): page_no = pagination.get_page_no(request.GET) order_form = forms.OrderForm( request.GET, order_choices=PROFILE_SORTING_CHOICES) order_value = order_form.cleaned_data['order'] if order_form.is_valid() else '' object_list = Profile.active.all() if order_value: # TODO consider using non case-sensitive ordering: object_list = object_list.order_by(order_value) page = pagination.get_page(object_list, page_no) context = { 'page': page, 'order': order_value, 'order_form': order_form, } return TemplateResponse(request, 'people/object_list.html', context)
def actioncluster_list_iot(request): """List IOT project ideas.""" extra_qs = {"is_approved": False, "status": ActionCluster.PUBLISHED} page_no = pagination.get_page_no(request.GET) object_list = ActionCluster.objects.select_related("domain").filter(**extra_qs) featured_list = ActionCluster.objects.select_related("domain").filter(is_featured=True, **extra_qs)[:3] page = pagination.get_page(object_list, page_no) context = { "featured_list": featured_list, "page": page, "domain_list": Domain.objects.all(), "stage_list": ActionCluster.STAGE_CHOICES, "appname": "actionclusters", "category": "iot", } return TemplateResponse(request, "actionclusters/object_list.html", context)
def testbed_list(request): """List of all the testbeds.""" testbed_query = {} if request.GET: form = TestbedFilterForm(request.GET) if form.is_valid(): testbed_query = get_testbed_query(form.cleaned_data) else: form = TestbedFilterForm() page_no = pagination.get_page_no(request.GET) object_list = Testbed.active.filter(**testbed_query) page = pagination.get_page(object_list, page_no) context = { 'page': page, 'form': form, } return TemplateResponse(request, 'testbed/object_list.html', context)
def search(request): form = SearchForm(request.GET) if 'q' in request.GET else SearchForm() page_no = pagination.get_page_no(request.GET) if form.is_valid(): object_list = watson.search(form.cleaned_data['q']) pagination_qs = '&%s' % urlencode({'q': form.cleaned_data['q']}) else: object_list = [] pagination_qs = '' page = pagination.get_page(object_list, page_no) page.object_list_top = [o.object for o in page.object_list_top] page.object_list_bottom = [o.object for o in page.object_list_bottom] context = { 'form': form, 'page': page, 'pagination_qs': pagination_qs, } return TemplateResponse(request, 'search/object_list.html', context)
def actioncluster_list(request, current=True, domain=None, stage=None, year=None, filter_name="", description=""): """List all the available ``ActionCluster``.""" extra_qs = {"is_approved": True, "status": ActionCluster.PUBLISHED} if domain: # Validate domain is valid if provided: extra_qs["domain"] = get_object_or_404(Domain, slug=domain) filter_name = extra_qs["domain"].name elif stage: # Validate stage is valid if provided: pk, name = get_stage_or_404(stage) extra_qs["stage"] = pk filter_name = name elif year: extra_qs["year"] = get_object_or_404(Year, year=year) filter_name = extra_qs["year"].year description = extra_qs["year"].description else: if current: extra_qs["year"] = get_object_or_404(Year, default_year=True) filter_name = "Current Year (" + extra_qs["year"].year + ")" description = extra_qs["year"].description else: extra_qs["year"] = get_object_or_404(Year, default_year=False) filter_name = "Archive 2015" page_no = pagination.get_page_no(request.GET) object_list = ActionCluster.objects.select_related("domain").filter(**extra_qs).order_by("needs_partner") featured_list = ActionCluster.objects.select_related("domain").filter(is_featured=True, **extra_qs)[:3] page = pagination.get_page(object_list, page_no) context = { "featured_list": featured_list, "page": page, "domain_list": Domain.objects.all(), "stage_list": ActionCluster.STAGE_CHOICES, "filter_name": filter_name, "description": description, "current_domain": domain, "current_stage": int(stage) if stage else None, "appname": "actionclusters", } return TemplateResponse(request, "actionclusters/object_list.html", context)
def app_list(request, domain=None, stage=None, filter_name=""): """Lists the published ``Applications``""" extra_qs = {} if domain: # Validate domain is valid if provided: extra_qs["domain"] = get_object_or_404(Domain, slug=domain) filter_name = extra_qs["domain"].name if stage: # Validate stage is valid if provided: pk, name = get_stage_or_404(stage) extra_qs["stage"] = pk filter_name = name page_no = pagination.get_page_no(request.GET) order_form = forms.OrderForm(request.GET, order_choices=APPS_SORTING_CHOICES) order_value = order_form.cleaned_data["order"] if order_form.is_valid() else "" object_list_app = Application.objects.select_related("domain").filter(status=Application.PUBLISHED, **extra_qs) object_list_ac = ActionCluster.objects.select_related("domain").filter(status=ActionCluster.PUBLISHED, **extra_qs) object_list = list(chain(object_list_app, object_list_ac)) if order_value: object_list = object_list.order_by(order_value) featured_list_app = Application.objects.select_related("domain").filter( status=Application.PUBLISHED, is_featured=True, **extra_qs )[:3] featured_list_ac = ActionCluster.objects.select_related("domain").filter( status=ActionCluster.PUBLISHED, is_featured=True, **extra_qs )[:3] featured_list = list(chain(featured_list_app, featured_list_ac))[:3] page = pagination.get_page(object_list, page_no) context = { "featured_list": featured_list, "page": page, "order": order_value, "order_form": order_form, "domain_list": Domain.objects.all(), "stage_list": Application.STAGE_CHOICES, "filter_name": filter_name, "current_domain": domain, "current_stage": int(stage) if stage else None, } return TemplateResponse(request, "apps/object_list.html", context)
def test_empty_page_returns_first_page(self): object_list = [2] * 22 page = pagination.get_page(object_list, 22) eq_(page.number, 1)
def test_existing_page_returns_correctly(self): object_list = [2] * 33 page = pagination.get_page(object_list, 2) eq_(page.number, 2)
def test_negative_page_returns_first_page(self): object_list = [2] * 44 page = pagination.get_page(object_list, -1) eq_(page.number, 1)
def test_page_is_split_in_two_sections(self): object_list = range(40) page = pagination.get_page(object_list, 1) eq_(page.object_list_top, range(12)) eq_(page.object_list_bottom, range(12, 24))
def test_shortpage_has_one_section(self): object_list = range(3) page = pagination.get_page(object_list, 1) eq_(page.object_list_top, [0, 1, 2]) eq_(page.object_list_bottom, [])