Mercurial > public > sg101
changeset 403:6e425c9b9d16
In support of #161; improve query performance of the feed view; also cache the feed view in urls.py.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sun, 27 Mar 2011 18:22:48 +0000 |
parents | 9175392da056 |
children | 41411066b16d |
files | gpp/podcast/urls.py gpp/podcast/views.py gpp/templates/podcast/base.html gpp/templates/podcast/feed.xml |
diffstat | 4 files changed, 81 insertions(+), 67 deletions(-) [+] |
line wrap: on
line diff
--- 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'), )
--- 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))
--- 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 %} +<link rel="alternate" type="application/rss+xml" title="SurfGuitar101 Podcast" href="{% url 'podcast-feed' %}" /> +{% endblock %} {% block content %} <h2><a href="{% url 'podcast-main' %}">SurfGuitar101 Podcast</a></h2> <img src="{{ channel.image.url }}" alt="Podcast Logo" style="float: left; margin-right:10px;" /> @@ -15,7 +18,7 @@ <a href="mailto:podcast@surfguitar101.com">podcast@surfguitar101.com</a>. </p> <p> -Subscribe to the podcast via RSS: <a href="{% url 'podcast.views.feed' %}">Feed</a> +<a href="{% url 'podcast-feed' %}"><img src="{{ STATIC_URL }}icons/feed.png" alt="RSS Feed" title="RSS Feed" /></a> <a href="{% url 'podcast-feed' %}">Subscribe to the podcast via RSS</a>. </p> <p> <strong>Hey iTunes users!</strong> Here is our <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=284928526">listing in iTunes</a>. Follow the previous link and then click the subscribe button to let iTunes automatically download episodes for you.
--- 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 @@ <itunes:image href="{{ channel.image.url }}" /> <itunes:category text="{{ channel.category }}" /> <itunes:explicit>{{ channel.explicit }}</itunes:explicit> -{% for item in channel.item_set.all %} +{% for item in channel.items %} <item> <title>{{ item.title }}</title> <itunes:author>{{ item.author }}</itunes:author>