src/hdalab/views/pages.py
changeset 271 8f77cf71ab02
parent 260 a15e8cb98525
child 299 8e00641076e7
equal deleted inserted replaced
265:73f19fa4f997 271:8f77cf71ab02
       
     1 # -*- coding: utf-8 -*-
       
     2 
       
     3 from django.shortcuts import render_to_response, redirect
       
     4 from django.template import RequestContext
       
     5 from hdabo.models import Datasheet, TaggedSheet
       
     6 import re
       
     7 import django.utils.simplejson as json
       
     8 
       
     9 def datasheet(request, hda_id=None):
       
    10     MAX_TAG = 15
       
    11     MAX_RELATED = 50
       
    12     
       
    13     datasheet = Datasheet.objects.select_related("organisation").get(hda_id=hda_id)
       
    14     
       
    15     domain = re.findall(r"^https?://(www\.)?([^/]+)",datasheet.url)
       
    16     ordered_tags = TaggedSheet.objects.filter(datasheet=datasheet,order__lte=MAX_TAG).select_related("tag").order_by('order')
       
    17     tags = [t.tag.id for t in ordered_tags]
       
    18     tagorders = dict([(t.tag.id,t.order) for t in ordered_tags])
       
    19     tsqs = TaggedSheet.objects.exclude(datasheet=datasheet).filter(order__lte=MAX_TAG,tag_id__in=tags)
       
    20     dsscores = {}
       
    21     addtoscore = 2*MAX_TAG
       
    22     
       
    23     for ts in tsqs:
       
    24         a_order = tagorders[ts.tag_id]
       
    25         b_order = ts.order
       
    26         score = addtoscore - a_order - b_order
       
    27         dsscore = dsscores.get(ts.datasheet_id,0)
       
    28         dsscores[ts.datasheet_id] = dsscore + score
       
    29     relatedqs = Datasheet.objects.filter(id__in=dsscores.keys()).select_related("organisation")
       
    30     relatedds = [{
       
    31         'id': ds.id,
       
    32         'hda_id': ds.hda_id,
       
    33         'title': ds.title,
       
    34         'description': ds.description,
       
    35         'organisation_name': ds.organisation.name,
       
    36         'organisation_url': ds.organisation.website,
       
    37         'score': dsscores.get(ds.id,0),
       
    38     } for ds in relatedqs]
       
    39     relatedds = sorted(relatedds, key=lambda ds: -ds['score'])[:MAX_RELATED]
       
    40     
       
    41     for ds in relatedds:
       
    42         otqs = TaggedSheet.objects.filter(datasheet_id=ds['id'],order__lte=MAX_TAG).select_related("tag").order_by('order')
       
    43         ds['ordered_tags'] = [{
       
    44             'id': t.tag.id,
       
    45             'label': t.tag.label,
       
    46             'order': t.order,
       
    47             'common' : (t.tag.id in tags)
       
    48         } for t in otqs]
       
    49     
       
    50     return render_to_response(
       
    51         "notice.html",
       
    52         {
       
    53             'datasheet':datasheet,
       
    54             'domain': domain[0][1] if domain else "",
       
    55             'ordered_tags': ordered_tags,
       
    56             'related': relatedds,
       
    57         },
       
    58         context_instance=RequestContext(request)
       
    59     )