# Copyright (C) 2008 Bradley M. Kuhn # Copyright (C) 2006, 2007 Software Freedom Law Center, Inc. # # This software's license gives you freedom; you can copy, convey, # propogate, redistribute and/or modify this program under the terms of # the GNU Affero General Public License (AGPL) as published by the Free # Software Foundation (FSF), either version 3 of the License, or (at your # option) any later version of the AGPL published by the FSF. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero # General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program in a file in the toplevel directory called # "AGPLv3". If not, see . # from datetime import datetime from django.conf.urls import url from django.views.generic.dates import DateDetailView, DayArchiveView, MonthArchiveView, YearArchiveView from .models import Cast, CastTag from .views import custom_index, query extra_context = {} info_dict = { 'queryset': Cast.objects.all(), 'date_field': 'pub_date', 'extra_context': extra_context, 'template_name': 'podjango/cast/cast_detail.html', } urlpatterns = [ 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'), # FIXME HOW DO I MAKE THE SLUG WORK WITH NO DATES IN IT. # (r'^(?P[-\w]+)/$', 'object_detail', dict(info_dict, slug_field='slug')), ] urlpatterns += [ url(r'^all/$', custom_index, dict(info_dict, paginate_by=20), name='cast'), url(r'^query/$', query, name='query'), ] # Code to display authors and tags on each blog page 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