def learn(request): projects = Project.objects.filter(not_listed=False, archived=False, under_development=False, deleted=False) if 'school' in request.GET: projects = projects.filter(school__slug=request.GET['school']) if 'featured' in request.GET: featured = request.GET['featured'] if featured == 'staff': projects = projects.filter(featured=True) elif featured == 'community': projects = projects.filter(community_featured=True) elif featured == 'fresh': one_week = datetime.datetime.now() - datetime.timedelta(weeks=1) projects = projects.filter(created_on__gte=one_week) if 'lang' in request.GET: projects = projects.filter(language=request.GET['lang']) if 'tag' in request.GET: projects = Project.get_tagged_projects(request.GET['tag'], projects) context = { 'projects': projects, 'schools': School.objects.all(), 'popular_tags': Project.get_popular_tags(), 'tags_form': project_forms.ProjectsTagSearch() } context.update(get_pagination_context(request, projects, 24)) return render_to_response('projects/learn.html', context, context_instance=RequestContext(request))
def learn(request, max_count=24): projects = Project.objects.filter(not_listed=False, deleted=False).order_by('-created_on') get_params = request.GET.copy() if not 'language' in get_params: get_params['language'] = get_language() form = project_forms.ProjectsFilterForm(projects, get_params) context = { 'schools': School.objects.all(), 'popular_tags': Project.get_popular_tags(), 'form': form, 'learn_url': reverse('projects_learn'), 'infinite_scroll': request.GET.get('infinite_scroll', False), } if form.is_valid(): archived = form.cleaned_data['archived'] under_development = form.cleaned_data['under_development'] projects = projects.filter(archived=archived, under_development=under_development) closed_signup = form.cleaned_data['closed_signup'] if closed_signup: projects = projects.exclude( category=Project.CHALLENGE).filter( sign_up__status=Signup.CLOSED) else: projects = projects.filter(Q(category=Project.CHALLENGE) | Q(sign_up__status=Signup.MODERATED) | Q(sign_up__status=Signup.NON_MODERATED)) featured = form.cleaned_data['featured'] if featured == project_forms.ProjectsFilterForm.SHOWCASE: context['learn_showcase'] = True projects = projects.filter(featured=True) elif featured == project_forms.ProjectsFilterForm.COMMUNITY: context['learn_community'] = True projects = projects.filter(community_featured=True) elif featured == project_forms.ProjectsFilterForm.FRESH: context['learn_fresh'] = True one_week = datetime.datetime.now() - datetime.timedelta(weeks=1) projects = projects.filter(created_on__gte=one_week) elif featured == project_forms.ProjectsFilterForm.POPULAR: popular = Relationship.objects.filter( deleted=False, target_project__isnull=False).values( 'target_project').annotate(Count('source')).order_by( '-source__count')[:max_count] popular_ids = [d['target_project'] for d in popular] projects = projects.filter(id__in=popular_ids) elif featured == project_forms.ProjectsFilterForm.UPDATED: external_ct = ContentType.objects.get_for_model(RemoteObject) relationship_ct = ContentType.objects.get_for_model(Relationship) last_updated = Activity.objects.filter( deleted=False, scope_object__isnull=False).exclude( target_content_type=external_ct).exclude( target_content_type=relationship_ct).values( 'scope_object').annotate(Max('created_on')).order_by( '-created_on__max')[:max_count] last_updated_ids = [d['scope_object'] for d in last_updated] projects = projects.filter(id__in=last_updated_ids) school = form.cleaned_data['school'] if school: context['learn_school'] = school projects = projects.filter(school=school) tag = form.cleaned_data['tag'] if tag: context['learn_tag'] = tag projects = Project.get_tagged_projects(tag, projects) if not form.cleaned_data['all_languages']: language = form.cleaned_data['language'] projects = projects.filter(language__startswith=language) reviewed = form.cleaned_data['reviewed'] if reviewed: accepted_reviews = Review.objects.filter( accepted=True).values('project_id') projects = projects.filter(id__in=accepted_reviews) context['projects'] = projects context.update(get_pagination_context(request, projects, max_count)) if request.is_ajax(): projects_html = render_to_string('projects/_learn_projects.html', context, context_instance=RequestContext(request)) projects_pagination = render_to_string('projects/_learn_pagination.html', context, context_instance=RequestContext(request)) learn_header = render_to_string('projects/_learn_header.html', context, context_instance=RequestContext(request)) learn_filters = render_to_string('projects/_learn_filters.html', context, context_instance=RequestContext(request)) data = { 'projects_html': projects_html, 'projects_pagination': projects_pagination, 'learn_header': learn_header, 'learn_filters': learn_filters, } json = simplejson.dumps(data) return http.HttpResponse(json, mimetype="application/json") return render_to_response('projects/learn.html', context, context_instance=RequestContext(request))