]> git.0d.be Git - panikweb.git/commitdiff
Recent listen on home @FRED request perf check
authorlaron <simon@surlaterre.org>
Sat, 7 Sep 2013 10:50:01 +0000 (12:50 +0200)
committerlaron <simon@surlaterre.org>
Sat, 7 Sep 2013 14:35:26 +0000 (16:35 +0200)
panikweb/views.py
panikweb_templates/templates/home.html

index 726ca5a5c6bac7a80fdd3b7deaa95a10072d2df0..74b26f2b4c333fec3c831a95f6b87bf0581a9f56 100644 (file)
@@ -384,6 +384,28 @@ class Home(TemplateView):
             days.append({'schedules': [x for x in schedules if x.is_on_weekday(day+1)],
                          'datetime': datetime(2007, 1, day+1)})
         context['days'] = days
+
+        context['episodes'] = Episode.objects.filter(
+                soundfile__podcastable=True, soundfile__fragment=False) \
+                .select_related().extra(select={
+                    'first_diffusion': 'emissions_diffusion.datetime', },
+                    select_params=(False, True),
+                    where=['''datetime = (SELECT MIN(datetime)
+                                            FROM emissions_diffusion
+                                        WHERE episode_id = emissions_episode.id)'''],
+                    tables=['emissions_diffusion'],).order_by('-first_diffusion') [:6]
+
+        # get all related soundfiles in a single query
+        soundfiles = {}
+        for soundfile in SoundFile.objects.select_related().filter(podcastable=True,
+                fragment=False, episode__in=[x.id for x in context['episodes']]):
+            soundfiles[soundfile.episode_id] = soundfile
+
+        # replace dynamic property by a static attribute, to avoid database
+        # lookups
+        for episode in context['episodes']:
+            episode.main_sound = soundfiles.get(episode.id)
+
         return context
 
 home = Home.as_view()
index 86a53f69a4f73d21f946e51e865b2cc17be71ac9..59c0699d000a55acd818dde9e30efabca8b6dc1d 100644 (file)
                <div class="wrapper">
                        <h2>Cette semaine sur Panik</h2>
                        {% weekview %}
+                       <h2>Ecouter</h2>
+                       <ul class="custom columns list">
+                       {% for episode in episodes %}
+                               <li class="item {% if episode.emission.categories.all.count = 0 %}nocat{% endif %} {% for category in episode.emission.categories.all %} {{ category|slugify }}{% endfor %}">
+                                       {% episode_resume model="inline" klass="standalone"%}                   
+                               </li>
+                       {% endfor %}
+                       </ul>
                </div>
        </div>
 {% endblock %}