--- a/src/spel/views.py Tue Mar 18 15:15:19 2014 +0100
+++ b/src/spel/views.py Wed Mar 19 12:38:06 2014 +0100
@@ -98,37 +98,47 @@
q = request.GET.get("q", "")
page = 1
content_list = None
+ # Query search
if q!="":
field = "abstract"
results, nb_contents, nb_segments = get_search_results(request, q, field, page, content_list)
results = results.object_list
else:
- type_inter_param = request.GET.get("type_inter", "")
- seg_queryset = []
+ results = None
+ nb_contents = 0
+ nb_segments = 0
+ # Filter by tags
+ type_inter_param = request.GET.get("type_inter", "")
+ if type_inter_param!="":
+ type_inter = [("type_inter: " + t) for t in type_inter_param.split(",")]
+ tags = Tag.objects.filter(name__in=type_inter)
+ # If results are from search, we get all segment from content list
+ seg_queryset = Segment
+ if results :
+ seg_queryset = []
+ for r in results:
+ seg_queryset += r["list"]
+ seg_queryset = Segment.objects.filter(id__in=[s.id for s in seg_queryset])
+ # Get segments from tagged items
+ tagged_segs = TaggedItem.objects.get_by_model(seg_queryset, tags).values()
+ # Prefetch all contents
+ all_contents = Content.objects.filter(iri_id__in=[s['iri_id'] for s in tagged_segs])
results = []
- tagged_segs = []
- if type_inter_param!="":
- type_inter = [("type_inter: " + t) for t in type_inter_param.split(",")]
- tags = Tag.objects.filter(name__in=type_inter)
- # Get segments from tagged items
- tagged_segs = TaggedItem.objects.get_by_model(Segment, tags).values()
- # Prefetch all contents
- all_contents = Content.objects.filter(iri_id__in=[s['iri_id'] for s in tagged_segs])
- for iri_id, items in groupby(tagged_segs, itemgetter('iri_id')):
- # Get good content
- content = None
- content_filter = filter(lambda e: e.iri_id == iri_id, all_contents)
- if len(content_filter)>0:
- content = content_filter[0]
- if content is None:
- continue
- # Get segments
- s = list(items)
- results.append({ 'content': content, 'list': s })
+ for iri_id, items in groupby(tagged_segs, itemgetter('iri_id')):
+ # Get good content
+ content = None
+ content_filter = filter(lambda e: e.iri_id == iri_id, all_contents)
+ if len(content_filter)>0:
+ content = content_filter[0]
+ if content is None:
+ continue
+ # Get segments
+ s = list(items)
+ results.append({ 'content': content, 'list': s })
nb_contents = len(results)
nb_segments = len(tagged_segs)
- context = {"results": results, "nb_contents": nb_contents, "nb_annotations": nb_segments}
+ context = {"q":q, "searched_tags": type_inter_param.split(","), "results": results, "nb_contents": nb_contents, "nb_annotations": nb_segments}
return self.render_to_response(context)