Mercurial > public > sg101
diff gpp/podcast/views.py @ 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 |
line wrap: on
line diff
--- 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))