# HG changeset patch # User Brian Neal # Date 1301250168 0 # Node ID 6e425c9b9d168741cd4342e18030bbb015e5f86d # Parent 9175392da05671bf0d29ed6036fb64b992d36d06 In support of #161; improve query performance of the feed view; also cache the feed view in urls.py. diff -r 9175392da056 -r 6e425c9b9d16 gpp/podcast/urls.py --- a/gpp/podcast/urls.py Sun Mar 27 01:51:18 2011 +0000 +++ b/gpp/podcast/urls.py Sun Mar 27 18:22:48 2011 +0000 @@ -1,8 +1,15 @@ -"""urls for the podcast application""" +""" +urls for the podcast application + +""" from django.conf.urls.defaults import * +from django.views.decorators.cache import cache_page + +from podcast.views import feed + urlpatterns = patterns('podcast.views', url(r'^$', 'index', name='podcast-main'), - (r'^(\d+)/$', 'detail'), - (r'^feed.xml/$', 'feed'), + url(r'^(\d+)/$', 'detail', name='podcast-detail'), + url(r'^feed.xml/$', cache_page(feed, 3600), name='podcast-feed'), ) diff -r 9175392da056 -r 6e425c9b9d16 gpp/podcast/views.py --- a/gpp/podcast/views.py Sun Mar 27 01:51:18 2011 +0000 +++ b/gpp/podcast/views.py Sun Mar 27 18:22:48 2011 +0000 @@ -15,86 +15,90 @@ def get_ext_from_url(url): - """ - This function returns the extension part of the path from the given - url. - """ - ext = os.path.splitext(urlparse(url).path)[1] - if ext.startswith('.'): - ext = ext[1:] - return ext + """ + This function returns the extension part of the path from the given + url. + """ + ext = os.path.splitext(urlparse(url).path)[1] + if ext.startswith('.'): + ext = ext[1:] + return ext def jplayer_params(ext, url, alt_ext, alt_url): - """ - Compute and returns a 2-tuple: (jplayer_media, jplayer_supplied) - where - jplayer_media: a string representation of the JSON for the - jplayer setMedia parameter - jplayer_supplied: the string for the jplayer supplied parameter + """ + Compute and returns a 2-tuple: (jplayer_media, jplayer_supplied) + where + jplayer_media: a string representation of the JSON for the + jplayer setMedia parameter + jplayer_supplied: the string for the jplayer supplied parameter - media_list is an input list or tuple of 2-tuples of the form - (media_type, url) - where media_type is e.g. mp3, m4a, ogg, etc. + media_list is an input list or tuple of 2-tuples of the form + (media_type, url) + where media_type is e.g. mp3, m4a, ogg, etc. - """ - media = dict([(ext, url)]) - if alt_ext and alt_url: - media[alt_ext] = alt_url + """ + media = dict([(ext, url)]) + if alt_ext and alt_url: + media[alt_ext] = alt_url - # prefer mp4 to mp3 - if alt_ext is None: - supplied = [ext] - elif ext == "m4a": - supplied = (ext, alt_ext) - else: - supplied = (alt_ext, ext) + # prefer mp4 to mp3 + if alt_ext is None: + supplied = [ext] + elif ext == "m4a": + supplied = (ext, alt_ext) + else: + supplied = (alt_ext, ext) - supplied = ", ".join(supplied) + supplied = ", ".join(supplied) - return json.dumps(media), supplied + return json.dumps(media), supplied def index(request): - try: - channel = Channel.objects.get(pk=1) - except Channel.DoesNotExist: - channel = None + try: + channel = Channel.objects.get(pk=1) + except Channel.DoesNotExist: + channel = None - return render_to_response('podcast/index.html', { - 'channel': channel, - }, - context_instance = RequestContext(request)) + return render_to_response('podcast/index.html', { + 'channel': channel, + }, + context_instance = RequestContext(request)) def detail(request, id): - podcast = get_object_or_404(Item.objects.select_related(), pk = id) + podcast = get_object_or_404(Item.objects.select_related(), pk = id) - ext = get_ext_from_url(podcast.enclosure_url) - alt_ext = None - if podcast.alt_enclosure_url: - alt_ext = get_ext_from_url(podcast.alt_enclosure_url) + ext = get_ext_from_url(podcast.enclosure_url) + alt_ext = None + if podcast.alt_enclosure_url: + alt_ext = get_ext_from_url(podcast.alt_enclosure_url) - jplayer_media, jplayer_supplied = jplayer_params(ext, podcast.enclosure_url, - alt_ext, podcast.alt_enclosure_url) + jplayer_media, jplayer_supplied = jplayer_params(ext, podcast.enclosure_url, + alt_ext, podcast.alt_enclosure_url) - return render_to_response('podcast/detail.html', { - 'channel': podcast.channel, - 'podcast': podcast, - 'ext': ext, - 'alt_ext': alt_ext, - 'jplayer_media': jplayer_media, - 'jplayer_supplied': jplayer_supplied, - }, - context_instance = RequestContext(request)) + return render_to_response('podcast/detail.html', { + 'channel': podcast.channel, + 'podcast': podcast, + 'ext': ext, + 'alt_ext': alt_ext, + 'jplayer_media': jplayer_media, + 'jplayer_supplied': jplayer_supplied, + }, + context_instance = RequestContext(request)) def feed(request): - try: - channel = Channel.objects.get(pk=1) - except Channel.DoesNotExist: - channel = None - return render_to_response('podcast/feed.xml', { - 'channel': channel, - }, - context_instance = RequestContext(request)) + try: + channel = Channel.objects.get(pk=1) + except Channel.DoesNotExist: + channel = None + + if channel: + channel.items = Item.objects.filter(channel=channel) + + return render_to_response('podcast/feed.xml', { + 'channel': channel, + }, + context_instance = RequestContext(request)) diff -r 9175392da056 -r 6e425c9b9d16 gpp/templates/podcast/base.html --- a/gpp/templates/podcast/base.html Sun Mar 27 01:51:18 2011 +0000 +++ b/gpp/templates/podcast/base.html Sun Mar 27 18:22:48 2011 +0000 @@ -1,5 +1,8 @@ {% extends 'base.html' %} {% load url from future %} +{% block custom_head %} + +{% endblock %} {% block content %}

SurfGuitar101 Podcast

Podcast Logo @@ -15,7 +18,7 @@ podcast@surfguitar101.com.

-Subscribe to the podcast via RSS: Feed +RSS Feed Subscribe to the podcast via RSS.

Hey iTunes users! Here is our listing in iTunes. Follow the previous link and then click the subscribe button to let iTunes automatically download episodes for you. diff -r 9175392da056 -r 6e425c9b9d16 gpp/templates/podcast/feed.xml --- a/gpp/templates/podcast/feed.xml Sun Mar 27 01:51:18 2011 +0000 +++ b/gpp/templates/podcast/feed.xml Sun Mar 27 18:22:48 2011 +0000 @@ -21,7 +21,7 @@ {{ channel.explicit }} -{% for item in channel.item_set.all %} +{% for item in channel.items %} {{ item.title }} {{ item.author }}