diff --git a/www/podjango/urls.py b/www/podjango/urls.py index 0cfa8ab672e43dedbefb7d6b848768bdefacfad9..1bb70209cd28a19358a58946b2d761d35eb575b8 100644 --- a/www/podjango/urls.py +++ b/www/podjango/urls.py @@ -21,18 +21,31 @@ from django.conf import settings from django.conf.urls import url, include from django.contrib import admin from django.contrib.syndication.views import Feed +from django.views.generic.dates import DateDetailView, DayArchiveView, MonthArchiveView, YearArchiveView -from podjango.feeds import feed_dict, view, Mp3CastFeed, OggCastFeed -from podjango import frontpage +from . import frontpage +from .feeds import feed_dict, view, Mp3CastFeed, OggCastFeed +from .models import Cast, CastTag +from .views import custom_index, query -#handler404 = 'modpythoncustom.view404' +app_name = 'podjango' -admin.autodiscover() +extra_context = {} +info_dict = { + 'queryset': Cast.objects.all(), + 'date_field': 'pub_date', + 'extra_context': extra_context, + 'template_name': 'podjango/cast/cast_detail.html', +} -app_name = 'podjango' urlpatterns = [ url(r'^$', frontpage.view), - url(r'', include('podjango.apps.cast.urls')), + url(r'^(?P\d{4})/(?P[a-z]{3})/(?P\w{1,2})/(?P[-\w]+)/$', DateDetailView.as_view(**info_dict), name='detail'), + url(r'^(?P\d{4})/(?P[a-z]{3})/(?P\w{1,2})/$', DayArchiveView.as_view(**info_dict), name='day-archive'), + url(r'^(?P\d{4})/(?P[a-z]{3})/$', MonthArchiveView.as_view(**info_dict), name='month-archive'), + url(r'^(?P\d{4})/$', YearArchiveView.as_view(**info_dict), name='year-archive'), + url(r'^all/$', custom_index, dict(info_dict, paginate_by=20), name='cast'), + url(r'^query/$', query, name='query'), url(r'^feeds/cast-ogg/$', OggCastFeed(), name='feed-ogg'), url(r'^feeds/cast-mp3/$', Mp3CastFeed(), name='feed-mp3'), url(r'^feeds/$', view, name='feeds'), @@ -41,3 +54,35 @@ urlpatterns = [ if settings.DEBUG: from django.conf.urls.static import static urlpatterns += static('/', document_root='podjango/static') + +def all_tags_by_use_amount(): + """Returns all tags with an added 'cnt' attribute (how many times used) + + Also sorts the tags so most-used tags appear first. + """ + + # tally use amount + retval = [] + current = None + for obj in CastTag.objects.filter(cast__pub_date__lte=datetime.now(), + cast__isnull=False).order_by('label'): + if current is not None and obj.id == current.id: + current.cnt += 1 + else: + if current is not None: + retval.append(current) + current = obj + current.cnt = 1 + if current is not None: + retval.append(current) + + # sort and return + retval.sort(key=lambda x: -x.cnt) + return retval + +# The functions are passed to the context uncalled so they will be +# called for each web request. If we want to only make these database +# queries a single time when a web server process begins, call both +# functions below (i.e. make both lines below end in '()') + +extra_context['all_tags'] = all_tags_by_use_amount