Grouped geographical locations and years by dbpedia uri
authorveltr
Fri, 23 Aug 2013 15:18:43 +0200
changeset 100 25636bb50756
parent 99 dc08f5692d80
child 101 19de76fe00a9
Grouped geographical locations and years by dbpedia uri
src/jocondelab/static/jocondelab/img/flag_br.png
src/jocondelab/static/jocondelab/img/flag_ca.png
src/jocondelab/static/jocondelab/img/flag_de.png
src/jocondelab/static/jocondelab/img/flag_eu.png
src/jocondelab/static/jocondelab/img/flag_ja.png
src/jocondelab/static/jocondelab/img/flag_pt.png
src/jocondelab/static/jocondelab/img/flag_zh.png
src/jocondelab/static/jocondelab/js/front-geo.js
src/jocondelab/static/jocondelab/js/front-timeline.js
src/jocondelab/templates/jocondelab/ajax_contents.html
src/jocondelab/templates/jocondelab/front_base.html
src/jocondelab/templates/jocondelab/front_geo.html
src/jocondelab/templates/jocondelab/front_notice.html
src/jocondelab/templates/jocondelab/front_search.html
src/jocondelab/templates/jocondelab/front_timeline.html
src/jocondelab/templates/jocondelab/partial/notice_list.html
src/jocondelab/urls.py
src/jocondelab/views/ajax.py
src/jocondelab/views/front_office.py
Binary file src/jocondelab/static/jocondelab/img/flag_br.png has changed
Binary file src/jocondelab/static/jocondelab/img/flag_ca.png has changed
Binary file src/jocondelab/static/jocondelab/img/flag_de.png has changed
Binary file src/jocondelab/static/jocondelab/img/flag_eu.png has changed
Binary file src/jocondelab/static/jocondelab/img/flag_ja.png has changed
Binary file src/jocondelab/static/jocondelab/img/flag_pt.png has changed
Binary file src/jocondelab/static/jocondelab/img/flag_zh.png has changed
--- a/src/jocondelab/static/jocondelab/js/front-geo.js	Thu Aug 22 17:20:27 2013 +0200
+++ b/src/jocondelab/static/jocondelab/js/front-geo.js	Fri Aug 23 15:18:43 2013 +0200
@@ -8,7 +8,7 @@
     L.tileLayer(
         "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
         {
-            attribution: "Map data © OpenStreetMap contributors"
+            attribution: gettext("Map data © OpenStreetMap contributors")
         }
     ).addTo(map);
     
@@ -29,13 +29,13 @@
             },
             function(data) {
                 _(data).each(function(coord) {
-                    if (coordIdCache.indexOf(coord.term_id) === -1) {
-                        coordIdCache.push(coord.term_id);
+                    if (coordIdCache.indexOf(coord.dbpedia_uri) === -1) {
+                        coordIdCache.push(coord.dbpedia_uri);
                         coordCache.push(coord);
                     }
                 });
                 coordCache = _(coordCache).sortBy(function(coord) {
-                    return -coord.nb_notice;
+                    return -coord.sum_notices;
                 });
                 showData();
             }
@@ -43,7 +43,7 @@
         showData();
     }
     
-    var itemCount = 20;
+    var itemCount = 12;
     
     function selectCoord(coord) {
         _(coordCache).each(function(coord) {
@@ -58,7 +58,7 @@
         map.setView([coord.latitude, coord.longitude], Math.max(Math.min(12,map.getZoom() + 1),6));
         
         $(".results").empty().load(
-            urls.ajax_contents_by_term + "?random=1&term_id=" + coord.term_id
+            urls.ajax_contents + "?random=1&dbpedia_uri=" + encodeURIComponent(coord.dbpedia_uri)
         );
     }
     
@@ -102,11 +102,11 @@
         source: urls.ajax_geo_search,
         select: function(event, ui) {
             var coord = ui.item;
-            if (coordIdCache.indexOf(coord.term_id) === -1) {
-                coordIdCache.push(coord.term_id);
+            if (coordIdCache.indexOf(coord.dbpedia_uri) === -1) {
+                coordIdCache.push(coord.dbpedia_uri);
                 coordCache.push(coord);
                 coordCache = _(coordCache).sortBy(function(coord) {
-                    return -coord.nb_notice;
+                    return -coord.sum_notices;
                 });
             }
             selectCoord(coord);
--- a/src/jocondelab/static/jocondelab/js/front-timeline.js	Thu Aug 22 17:20:27 2013 +0200
+++ b/src/jocondelab/static/jocondelab/js/front-timeline.js	Fri Aug 23 15:18:43 2013 +0200
@@ -40,8 +40,7 @@
     }
     
     var itemTpl = _.template(
-        '<li class="timeline-item">'
-        + '<div class="timeline-item-box<%- current ? " timeline-current" : "" %>" data-term-id="<%- item.term_id %>"'
+        '<li class="timeline-item"><div class="timeline-item-box<%- current ? " timeline-current" : "" %>"'
         + ' data-dbpedia-uri="<%- item.dbpedia_uri %>" style="left: <%- left %>px; width: <%- width %>px;">'
         + '<div class="timeline-item-label"><%- item.label %></div></div></li>'
     );
@@ -72,7 +71,7 @@
                 var l = Math.max(0, yrToX(item.start_year)),
                     r = Math.min(cWidth, yrToX(item.end_year + 1));
                 return itemTpl({
-                    current: (item.term_id == currentTerm),
+                    current: (item.dbpedia_uri == currentTerm),
                     item: item,
                     left: l,
                     width: (r-l)
@@ -82,11 +81,11 @@
         bindDbpediaBox(".timeline-item-box");
         $(".timeline-item-box").click(function() {
             var $this = $(this);
-            currentTerm = $this.attr("data-term-id")
+            currentTerm = $this.attr("data-dbpedia-uri")
             $(".timeline-item-box").removeClass("timeline-current");
             $this.addClass("timeline-current");
             $(".results").empty().load(
-                urls.ajax_contents_by_term + "?random=1&term_id=" + currentTerm
+                urls.ajax_contents + "?random=1&dbpedia_uri=" + encodeURIComponent(currentTerm)
             );
         })
     }
@@ -100,8 +99,8 @@
             },
             function(data) {
                 _(data).each(function(term) {
-                    if (tlIdCache.indexOf(term.term_id) === -1) {
-                        tlIdCache.push(term.term_id);
+                    if (tlIdCache.indexOf(term.dbpedia_uri) === -1) {
+                        tlIdCache.push(term.dbpedia_uri);
                         tlCache.push(term);
                     }
                 });
--- a/src/jocondelab/templates/jocondelab/ajax_contents.html	Thu Aug 22 17:20:27 2013 +0200
+++ b/src/jocondelab/templates/jocondelab/ajax_contents.html	Fri Aug 23 15:18:43 2013 +0200
@@ -1,9 +1,6 @@
 {% load i18n %}
-<h2 class="resultcount"><b>{{count}}</b> {% trans 'results for:' %} <b>{{termlabel}}</b></h2>
 
-<ul class="notice-list clearfix">
-    {% include 'jocondelab/partial/notice_list.html' %}
-</ul>
+{% include 'jocondelab/partial/notice_list.html' %}
 
 <script type="text/javascript">
     bindResultsMouseover();
--- a/src/jocondelab/templates/jocondelab/front_base.html	Thu Aug 22 17:20:27 2013 +0200
+++ b/src/jocondelab/templates/jocondelab/front_base.html	Fri Aug 23 15:18:43 2013 +0200
@@ -1,6 +1,6 @@
 {% load i18n %}
 <!doctype html>
-<html lang="{% if lang %}{{lang}}{% else %}{{LANGUAGE_CODE}}{% endif %}">
+<html lang="{% if lang %}{{lang|slice:':2'}}{% else %}{{LANGUAGE_CODE|slice:':2'}}{% endif %}">
     <head>
     {% block head %}
     	<meta charset="UTF-8" />
@@ -40,13 +40,13 @@
                     <div class="top-menus">
                         <form action="{% url 'django.views.i18n.set_language' %}" method="post" id="lang_form" class="menu-container">
                             {% csrf_token %}
-                            <a class="language-current" href="#"><img src="{{STATIC_URL}}jocondelab/img/flag_{% if lang %}{{lang}}{% else %}{{LANGUAGE_CODE}}{% endif %}.png" /></a>
+                            <a class="language-current" href="#"><img src="{{STATIC_URL}}jocondelab/img/flag_{% if lang %}{{lang}}{% else %}{{LANGUAGE_CODE|slice:':2'}}{% endif %}.png" /></a>
                             <ul class="menu-list language-list">
                             {% get_language_info_list for LANGUAGES as languages %}
                             {% for language in languages %}
                                 <li class="menu-item">
                                     <label for="language" class="language-label">{{ language.name_local }}</label>
-                                    <input type="submit" name="language" class="language-button" style="background-image: url({{STATIC_URL}}jocondelab/img/flag_{{ language.code }}.png)" value="{{ language.code }}" title="{{ language.name_local }}" />
+                                    <input type="submit" name="language" class="language-button" style="background-image: url({{STATIC_URL}}jocondelab/img/flag_{{language.code|slice:':2'}}.png)" value="{{ language.code }}" title="{{ language.name_local }}" />
                                 </li>
                             {% endfor %}
                             </ul>
--- a/src/jocondelab/templates/jocondelab/front_geo.html	Thu Aug 22 17:20:27 2013 +0200
+++ b/src/jocondelab/templates/jocondelab/front_geo.html	Fri Aug 23 15:18:43 2013 +0200
@@ -16,11 +16,10 @@
     {{block.super}}
     <script type="text/javascript">
         var urls = {
-            image_prefix: "{{JOCONDE_IMG_BASE_URL}}",
             static_url: "{{STATIC_URL}}",
             ajax_geo_coords: "{% url 'ajax_geo_coords' %}",
             ajax_geo_search: "{% url 'ajax_geo_search' %}",
-            ajax_contents_by_term: "{% url 'ajax_contents_by_term' %}"
+            ajax_contents: "{% url 'ajax_contents' %}"
         }
     </script>
     <script type="text/javascript" src="{{STATIC_URL}}jocondelab/js/front-geo.js"></script>
--- a/src/jocondelab/templates/jocondelab/front_notice.html	Thu Aug 22 17:20:27 2013 +0200
+++ b/src/jocondelab/templates/jocondelab/front_notice.html	Fri Aug 23 15:18:43 2013 +0200
@@ -24,31 +24,31 @@
 
 {% block title %}JocondeLab &raquo; {{title}}{% endblock %}
 
-{% block breadcrumbs %}<a href="{% url 'front_notice' notice.id %}">{{title|truncatechars:30}}</a>{% endblock %}
+{% block breadcrumbs %}<a href="{% url 'front_notice' object.id %}">{{title|truncatechars:30}}</a>{% endblock %}
 
 {% block main %}
 
             <ul class="notice-images">
                 {% for img in images %}
                 <li>
-                    <a href="{{JOCONDE_IMG_BASE_URL}}{{img}}" title="{{title}}">
-                        <img src="{{JOCONDE_IMG_BASE_URL}}{{img}}" />
+                    <a href="{{img}}" title="{{title}}">
+                        <img src="{{img}}" />
                     </a>
                 </li>
                 {% endfor %}
             </ul>
             
             <table class="notice-datasheet">
-            {% if notice.titr %}
+            {% if object.titr %}
                 <tr class="notice-title">
                     <th>{% trans 'Title:' %}</th>
-                    <td>{{notice.titr}}</td>
+                    <td>{{object.titr}}</td>
                 </tr>
             {% endif %}
-            {% if notice.deno %}
-                <tr {% if not notice.titr %}class="notice-title"{% endif %}>
+            {% if object.deno %}
+                <tr {% if not object.titr %}class="notice-title"{% endif %}>
                     <th>{% trans 'Denomination:' %}</th>
-                    <td>{{notice.deno}}</td>
+                    <td>{{object.deno}}</td>
                 </tr>
             {% endif %}
             {% for thesaurus, terms in terms_by_thesaurus.items %}
@@ -65,34 +65,34 @@
                      </td>
                 </tr>
             {% endfor %}
-            {% if notice.desc %}
+            {% if object.desc %}
                 <tr>
                     <th>{% trans 'Description:' %}</th>
-                    <td>{{notice.desc}}</td>
+                    <td>{{object.desc}}</td>
                 </tr>
             {% endif %}
-            {% if notice.hist %}
+            {% if object.hist %}
                 <tr>
                     <th>{% trans 'History:' %}</th>
-                    <td>{{notice.hist}}</td>
+                    <td>{{object.hist}}</td>
                 </tr>
             {% endif %}
-            {% if notice.loca %}
+            {% if object.loca %}
                 <tr>
                     <th>{% trans 'Conservation location:' %}</th>
-                    <td>{{notice.loca}}</td>
+                    <td>{{object.loca}}</td>
                 </tr>
             {% endif %}
-            {% if notice.copy %}
+            {% if object.copy %}
                 <tr class="datasheet-small">
                     <th>{% trans 'Datasheet rights:' %}</th>
-                    <td>{{notice.copy}}</td>
+                    <td>{{object.copy}}</td>
                 </tr>
             {% endif %}
-            {% if notice.phot %}
+            {% if object.phot %}
                 <tr class="datasheet-item datasheet-small">
                     <th>{% trans 'Images rights:' %}</th>
-                    <td>{{notice.phot}}</td>
+                    <td>{{object.phot}}</td>
                 </tr>
             {% endif %}
             </table>
--- a/src/jocondelab/templates/jocondelab/front_search.html	Thu Aug 22 17:20:27 2013 +0200
+++ b/src/jocondelab/templates/jocondelab/front_search.html	Fri Aug 23 15:18:43 2013 +0200
@@ -32,9 +32,6 @@
                 {% endfor %}
             </ul>
             
-            <h2 class="resultcount"><b>{{rescount}}</b> {% if queryterms %}{% trans 'results for:' %} <b>{{queryterms}}</b>{% else %}{% trans 'results' %}{% endif %}</h2>
+            {% include 'jocondelab/partial/notice_list.html' %}
             
-            <ul class="notice-list clearfix">
-                {% include 'jocondelab/partial/notice_list.html' %}
-            </ul>
 {% endblock %}
--- a/src/jocondelab/templates/jocondelab/front_timeline.html	Thu Aug 22 17:20:27 2013 +0200
+++ b/src/jocondelab/templates/jocondelab/front_timeline.html	Fri Aug 23 15:18:43 2013 +0200
@@ -11,10 +11,9 @@
     {{block.super}}
     <script type="text/javascript">
         var urls = {
-            image_prefix: "{{JOCONDE_IMG_BASE_URL}}",
             static_url: "{{STATIC_URL}}",
             ajax_years: "{% url 'ajax_years' %}",
-            ajax_contents_by_term: "{% url 'ajax_contents_by_term' %}"
+            ajax_contents: "{% url 'ajax_contents' %}"
         }
     </script>
     <script type="text/javascript" src="{{STATIC_URL}}jocondelab/js/front-timeline.js"></script>
--- a/src/jocondelab/templates/jocondelab/partial/notice_list.html	Thu Aug 22 17:20:27 2013 +0200
+++ b/src/jocondelab/templates/jocondelab/partial/notice_list.html	Fri Aug 23 15:18:43 2013 +0200
@@ -1,4 +1,8 @@
 {% load i18n %}
+
+<h2 class="resultcount"><b>{{count}}</b> {% if searchterm %}{% trans 'results for:' %} <b>{{searchterm}}</b>{% else %}{% trans 'results' %}{% endif %}</h2>
+
+<ul class="notice-list clearfix">
 {% for notice in notices %}
     <li class="notice-item" data-notice-id="{{notice.id}}">
         <div class="notice-contents">
@@ -33,4 +37,5 @@
             </div>
         </div>
     </li>
-{% endfor %}
\ No newline at end of file
+{% endfor %}
+</ul>
\ No newline at end of file
--- a/src/jocondelab/urls.py	Thu Aug 22 17:20:27 2013 +0200
+++ b/src/jocondelab/urls.py	Fri Aug 23 15:18:43 2013 +0200
@@ -35,10 +35,10 @@
     url(r'^search/$', SearchView.as_view(), name='front_search'),
     url(r'^geo/$', TemplateView.as_view(template_name="jocondelab/front_geo.html"), name='front_geo'),
     url(r'^timeline/$', TemplateView.as_view(template_name="jocondelab/front_timeline.html"), name='front_timeline'),
-    url(r'^notice/(?P<notice_id>\d+)/$', NoticeView.as_view(), name='front_notice'),
+    url(r'^notice/(?P<pk>\d+)/$', NoticeView.as_view(), name='front_notice'),
     url(r'^ajax/years/$', 'jocondelab.views.ajax.years', name='ajax_years'),
     url(r'^ajax/geocoords/$', 'jocondelab.views.ajax.geo_coords', name='ajax_geo_coords'),
     url(r'^ajax/geosearch/$', 'jocondelab.views.ajax.geo_search', name='ajax_geo_search'),
-    url(r'^ajax/contents/$', 'jocondelab.views.ajax.contents_by_term', name='ajax_contents_by_term'),
+    url(r'^ajax/contents/$', 'jocondelab.views.ajax.contents', name='ajax_contents'),
 )
 
--- a/src/jocondelab/views/ajax.py	Thu Aug 22 17:20:27 2013 +0200
+++ b/src/jocondelab/views/ajax.py	Fri Aug 23 15:18:43 2013 +0200
@@ -10,46 +10,47 @@
 import django.utils.simplejson as json
 from django.http import HttpResponse
 from django.template.response import TemplateResponse
+from django.db.models import Sum
 from django.conf import settings
 from jocondelab.views.front_office import get_notices
 
 def years(request):
     
-    lang = request.GET.get('lang', request.LANGUAGE_CODE)
+    lang = request.GET.get('lang', request.LANGUAGE_CODE)[:2]
     from_year = request.GET.get('from_year', None)
     to_year = request.GET.get('to_year', None)
     count = request.GET.get('count', 20)
     
-    qs = DbpediaYears.objects.filter(term__dbpedia_fields__language_code=lang).order_by('-term__nb_notice')
-    
+    qs = DbpediaYears.objects.filter(term__dbpedia_fields__language_code=lang)
     if to_year:
         qs = qs.filter(start_year__lte=to_year)
     if from_year:
         qs = qs.filter(end_year__gte=from_year)
+    qs = qs.values('start_year','end_year','term__dbpedia_fields__label','term__dbpedia_uri')
+    qs = qs.annotate(sum_notices=Sum('term__nb_notice')).order_by('-sum_notices')
     
     qs = qs[:count]
     
     results = [{
-                "start_year": y.start_year,
-                "end_year": y.end_year,
-                "term_id": y.term.id,
-                "label": y.term.dbpedia_fields.get(language_code=lang).label,
-                "nb_notice": y.term.nb_notice,
-                "dbpedia_uri": y.term.dbpedia_uri
+                "start_year": y["start_year"],
+                "end_year": y["end_year"],
+                "label": y["term__dbpedia_fields__label"],
+                "sum_notices": y["sum_notices"],
+                "dbpedia_uri": y["term__dbpedia_uri"]
                 } for y in qs]
     
     return HttpResponse(content=json.dumps(results), mimetype='application/json')
 
 def geo_coords(request):
     
-    lang = request.GET.get('lang', request.LANGUAGE_CODE)
+    lang = request.GET.get('lang', request.LANGUAGE_CODE)[:2]
     min_lat = request.GET.get('min_lat', None)
     max_lat = request.GET.get('max_lat', None)
     min_lng = request.GET.get('min_lng', None)
     max_lng = request.GET.get('max_lng', None)
     count = request.GET.get('count', 20)
     
-    qs = DbpediaGeo.objects.filter(term__dbpedia_fields__language_code=lang).order_by('-term__nb_notice')
+    qs = DbpediaGeo.objects.filter(term__dbpedia_fields__language_code=lang)
     
     if min_lat:
         qs = qs.filter(latitude__gt=min_lat)
@@ -60,43 +61,49 @@
     if max_lng:
         qs = qs.filter(longitude__lt=max_lng)
     
+    qs = qs.values('latitude','longitude','term__dbpedia_fields__label','term__dbpedia_uri')
+    qs = qs.annotate(sum_notices=Sum('term__nb_notice')).order_by('-sum_notices')
+    
     qs = qs[:count]
     
     results = [{
-                "latitude": y.latitude,
-                "longitude": y.longitude,
-                "term_id": y.term.id,
-                "label": y.term.dbpedia_fields.get(language_code=lang).label,
-                "nb_notice": y.term.nb_notice,
-                "dbpedia_uri": y.term.dbpedia_uri
+                "latitude": y["latitude"],
+                "longitude": y["longitude"],
+                "label": y["term__dbpedia_fields__label"],
+                "sum_notices": y["sum_notices"],
+                "dbpedia_uri": y["term__dbpedia_uri"]
                 } for y in qs]
     
     return HttpResponse(content=json.dumps(results), mimetype='application/json')
 
-def contents_by_term(request):
+def contents(request):
     
-    lang = request.GET.get('lang', request.LANGUAGE_CODE)
+    lang = request.GET.get('lang', request.LANGUAGE_CODE)[:2]
     count = request.GET.get('count', 24)
     random = ("random" in request.GET and request.GET["random"])
     format = request.GET.get('format', 'text/html')
     term_id = request.GET.get('term_id', None)
+    dbpedia_uri = request.GET.get('dbpedia_uri', None)
     
-    if term_id is None:
-        rescount = 0
-        results = []
-        termlabel = ""
-    else:
-        qs = Notice.objects.filter(noticeterm__term_id=term_id, image=True)
-        rescount = qs.count()
-        if random:
-            qs = qs.order_by('?')
-        results = get_notices(qs[:count], lang)
+    qs = Notice.objects.filter(image=True)
+    searchlabel = ""
+    termobj = None
+    if term_id:
+        qs = qs.filter(noticeterm__term_id=term_id)
         termobj = Term.objects.get(id=term_id)
+    if dbpedia_uri:
+        qs = qs.filter(noticeterm__term__dbpedia_uri=dbpedia_uri)
+        termobj = Term.objects.filter(dbpedia_uri=dbpedia_uri)[0]
+    rescount = qs.count()
+    if random:
+        qs = qs.order_by('?')
+    results = get_notices(qs[:count], lang)
+    if termobj:
         termtrans = termobj.dbpedia_fields.filter(language_code = lang)
-        termlabel = termtrans[0].label if termtrans.count() else termobj.label
+        searchlabel = termtrans[0].label if termtrans.count() else termobj.label
     
     context = {
-               "termlabel": termlabel,
+               "searchterm": searchlabel,
                "count": rescount,
                "notices": results
             }
@@ -104,24 +111,29 @@
     if format == 'text/html':
         return TemplateResponse(request, 'jocondelab/ajax_contents.html', context )
     
-    return HttpResponse(content=json.dumps(context), mimetype='application/json')
+    if format == 'application/json':
+        return HttpResponse(content=json.dumps(context), mimetype='application/json')
+    
+    return HttpResponse(status=400, content='Unknown Format')
 
 def geo_search(request):
     
-    lang = request.GET.get('lang', request.LANGUAGE_CODE)
+    lang = request.GET.get('lang', request.LANGUAGE_CODE)[:2]
     q = request.GET.get('term', None)
     count = request.GET.get('count', 20)
     
-    qs = DbpediaGeo.objects.filter(term__dbpedia_fields__language_code=lang, term__dbpedia_fields__label__istartswith=q).order_by('term__dbpedia_fields__label')[:count]
+    qs = DbpediaGeo.objects.filter(term__dbpedia_fields__language_code=lang, term__dbpedia_fields__label__istartswith=q)
+    qs = qs.values('latitude','longitude','term__dbpedia_fields__label','term__dbpedia_uri')
+    qs = qs.annotate(sum_notices=Sum('term__nb_notice')).order_by('-sum_notices')[:count]
     
     results = [{
-                "latitude": d.latitude,
-                "longitude": d.longitude,
-                "term_id": d.term.id,
-                "nb_notice": d.term.nb_notice,
-                "dbpedia_uri": d.term.dbpedia_uri,
-                "label": d.term.dbpedia_fields.get(language_code=lang).label
-                } for d in qs]
+                "latitude": y["latitude"],
+                "longitude": y["longitude"],
+                "label": y["term__dbpedia_fields__label"],
+                "sum_notices": y["sum_notices"],
+                "dbpedia_uri": y["term__dbpedia_uri"]
+                } for y in qs]
+    results.sort(key=lambda y: y["label"])
     
     return HttpResponse(content=json.dumps(results), mimetype='application/json')
     
\ No newline at end of file
--- a/src/jocondelab/views/front_office.py	Thu Aug 22 17:20:27 2013 +0200
+++ b/src/jocondelab/views/front_office.py	Fri Aug 23 15:18:43 2013 +0200
@@ -8,7 +8,7 @@
 from core.models import (Notice, Thesaurus, Term)
 from jocondelab.models import DbpediaFields
 from django.conf import settings
-from django.views.generic import View
+from django.views.generic import View, DetailView
 from django.views.generic.base import TemplateResponseMixin
 from django.db.models import Q, Count
 import re
@@ -49,7 +49,7 @@
         starttime = time.time()
         
         context = {}
-        lang = request.GET.get('lang',request.LANGUAGE_CODE)
+        lang = request.GET.get('lang',request.LANGUAGE_CODE)[:2]
         querystr = request.GET.get('q', "")
         search_in_title = request.GET.get('search_in_title', True)
         search_in_translations = request.GET.get('search_in_translations', True)
@@ -79,9 +79,9 @@
             ns = qs.order_by('?')[:npp]
         
         context["lang"] = lang
-        context["rescount"] = nbnotices
+        context["count"] = nbnotices
         context["notices"] = get_notices(ns, lang)
-        context["queryterms"] = querystr
+        context["searchterm"] = querystr
         
         wpp = 50
         if show_tagcloud:
@@ -108,23 +108,22 @@
         
         return self.render_to_response(context)
 
-class NoticeView(View, TemplateResponseMixin):
+class NoticeView(DetailView):
     
+    model = Notice
     template_name = "jocondelab/front_notice.html"
     
-    def get(self, request, notice_id):
+    def get_context_data(self, **kwargs):
         
-        context = {}
-        lang = request.GET.get('lang',request.LANGUAGE_CODE)
-        
-        notice = Notice.objects.get(id=notice_id)
+        context = super(NoticeView, self).get_context_data(**kwargs)
+        lang = self.request.GET.get('lang',self.request.LANGUAGE_CODE)[:2]
         
         context["lang"] = lang
-        context["notice"] = notice
-        context["title"] = notice.titr if notice.titr else notice.deno
-        context["images"] = [i.url for i in notice.images.exclude(relative_url__endswith='v.jpg')]
+        context["images"] = [settings.JOCONDE_IMG_BASE_URL + i.url for i in self.object.images.exclude(relative_url__endswith='v.jpg')]
+        context["title"] = self.object.titr if self.object.titr else self.object.deno
+        
         terms = []
-        for nt in notice.noticeterm_set.select_related('dbpedia_fields').all():
+        for nt in self.object.noticeterm_set.select_related('term__dbpedia_fields').all():
             translated_term = nt.term.dbpedia_fields.filter(language_code = lang)
             termdict = {
                 "label": nt.term.label,
@@ -142,10 +141,9 @@
                    "untranslated": []
                    }
             termsbythesaurus[term["thesaurus"]]["translated" if term["translated"] else "untranslated"].append(term)
-        
+         
         context["terms_by_thesaurus"] = termsbythesaurus
-        context['JOCONDE_IMG_BASE_URL'] = settings.JOCONDE_IMG_BASE_URL
         
-        return self.render_to_response(context)
+        return context
 
     
\ No newline at end of file