Ticket #4481: databrowse_pagination_calendars.diff
File databrowse_pagination_calendars.diff, 25.0 KB (added by , 17 years ago) |
---|
-
django/contrib/databrowse/plugins/calendars.py
5 5 from django.shortcuts import render_to_response 6 6 from django.utils.text import capfirst 7 7 from django.utils.translation import get_date_formats 8 from django.template import RequestContext 8 9 from django.views.generic import date_based 9 10 from django.utils.encoding import force_unicode 10 11 import datetime … … 63 64 return render_to_response('databrowse/calendar_homepage.html', {'root_url': self.site.root_url, 'model': easy_model, 'field_list': field_list}) 64 65 65 66 def calendar_view(self, request, field, year=None, month=None, day=None): 66 easy_model = EasyModel(self.site, self.model) 67 extra_context = {'root_url': self.site.root_url, 'model': easy_model, 'field': field} 68 if day is not None: 69 # TODO: The objects in this template should be EasyInstances 70 return date_based.archive_day(request, year, month, day, self.model.objects.all(), field.name, 71 template_name='databrowse/calendar_day.html', allow_empty=False, allow_future=True, 72 extra_context=extra_context) 73 elif month is not None: 74 return date_based.archive_month(request, year, month, self.model.objects.all(), field.name, 75 template_name='databrowse/calendar_month.html', allow_empty=False, allow_future=True, 76 extra_context=extra_context) 77 elif year is not None: 78 return date_based.archive_year(request, year, self.model.objects.all(), field.name, 79 template_name='databrowse/calendar_year.html', allow_empty=False, allow_future=True, 80 extra_context=extra_context) 67 page = 0 68 if request.has_key('page'): 69 page = request.GET['page'] 70 easy_model = EasyModel(self.site, self.model, paginate_by = 100, page = page) 71 context = {'model': easy_model, 'field': field, 'root_url' : self.site.root_url} 72 if day is not None and day != "objects": 73 context['year'] = year 74 context['month'] = month 75 context['day'] = day 76 query = { 77 "%s__day" % field.name : int(day), 78 "%s__month" % field.name : int(time.strftime('%m', time.strptime(month, '%B'))), 79 "%s__year" % field.name : int(year), 80 } 81 context['object_list'] = easy_model.objects(**query) 82 template_name = "databrowse/calendar_fordate.html" 83 elif month is not None and month != "objects": 84 context['year'] = year 85 context['month'] = month 86 query = { 87 "%s__month" % field.name : int(time.strftime('%m', time.strptime(month, '%B'))), 88 "%s__year" % field.name : int(year), 89 } 90 if day == "objects": 91 context['object_list'] = easy_model.objects(**query) 92 template_name = "databrowse/calendar_fordate.html" 93 else: 94 context['date_list'] = self.model.objects.filter(**query).dates(field.name, 'day') 95 template_name = "databrowse/calendar_daterange.html" 96 elif year is not None and year != "objects": 97 context['year'] = year 98 query = {"%s__year" % field.name : int(year)} 99 if month == "objects": 100 context['object_list'] = easy_model.objects(**query) 101 template_name = "databrowse/calendar_fordate.html" 102 else: 103 context['date_list'] = self.model.objects.filter(**query).dates(field.name, 'month') 104 template_name = "databrowse/calendar_daterange.html" 81 105 else: 82 return date_based.archive_index(request, self.model.objects.all(), field.name, 83 template_name='databrowse/calendar_main.html', allow_empty=True, allow_future=True, 84 extra_context=extra_context) 106 context = { 'model' : easy_model, 'field' : field } 107 if year == "objects": 108 context['object_list'] = easy_model.objects() 109 template_name = "databrowse/calendar_fordate.html" 110 else: 111 context['date_list'] = self.model.objects.all().dates(field.name, 'year') 112 template_name = "databrowse/calendar_daterange.html" 113 return render_to_response(template_name, context, context_instance=RequestContext(request)) 85 114 assert False, ('%s, %s, %s, %s' % (field, year, month, day)) -
django/contrib/databrowse/plugins/fieldchoices.py
65 65 return render_to_response('databrowse/fieldchoice_homepage.html', {'root_url': self.site.root_url, 'model': easy_model, 'field_list': field_list}) 66 66 67 67 def field_view(self, request, field, value=None): 68 easy_model = EasyModel(self.site, self.model) 68 page = 0 69 if request.has_key('page'): 70 page = int(request.GET['page']) 71 easy_model = EasyModel(self.site, self.model, paginate_by = 100, page = page) 69 72 easy_field = easy_model.field(field.name) 70 73 if value is not None: 71 74 obj_list = easy_model.objects(**{field.name: value}) 72 75 return render_to_response('databrowse/fieldchoice_detail.html', {'root_url': self.site.root_url, 'model': easy_model, 'field': easy_field, 'value': value, 'object_list': obj_list}) 73 obj_list = [v[field.name] for v in self.model._default_manager.distinct().order_by(field.name).values(field.name)] 74 return render_to_response('databrowse/fieldchoice_list.html', {'root_url': self.site.root_url, 'model': easy_model, 'field': easy_field, 'object_list': obj_list}) 76 op = ObjectPaginator(self.model._default_manager.distinct().order_by(field.name), 100) 77 results = op.get_page(page) 78 pagination_dict = { 79 "current_page" : page, 80 "pages" : op.pages, 81 } 82 obj_list = [getattr(v, field.name) for v in results] 83 return render_to_response('databrowse/fieldchoice_list.html', {'root_url': self.site.root_url, 'model': easy_model, 'field': easy_field, 'object_list': obj_list, "pagination" : pagination_dict}) -
django/contrib/databrowse/datastructures.py
7 7 from django.utils import dateformat 8 8 from django.utils.text import capfirst 9 9 from django.utils.translation import get_date_formats 10 from django.core.paginator import ObjectPaginator, InvalidPage 10 11 from django.utils.encoding import smart_unicode, smart_str, iri_to_uri 11 12 12 13 EMPTY_VALUE = '(None)' 13 14 14 15 class EasyModel(object): 15 def __init__(self, site, model ):16 def __init__(self, site, model, paginate_by = None, page = 0): 16 17 self.site = site 17 18 self.model = model 18 19 self.model_list = site.registry.keys() 19 20 self.verbose_name = model._meta.verbose_name 20 21 self.verbose_name_plural = model._meta.verbose_name_plural 22 self.paginate_by, self.page = paginate_by, page 23 self.pagination = None 21 24 22 25 def __repr__(self): 23 26 return '<EasyModel for %s>' % smart_str(self.model._meta.object_name) … … 29 32 def url(self): 30 33 return '%s%s/%s/' % (self.site.root_url, self.model._meta.app_label, self.model._meta.module_name) 31 34 32 def objects(self, **kwargs): 33 for obj in self.model._default_manager.filter(**kwargs): 35 def objects_from_queryset(self, qs): 36 if self.paginate_by is not None: 37 op = ObjectPaginator(qs, self.paginate_by) 38 results = op.get_page(self.page) 39 self.pagination = { 40 u"pages" : op.pages, 41 u"current_page" : int(self.page), 42 } 43 else: 44 results = qs 45 for obj in results: 34 46 yield EasyInstance(self, obj) 35 47 48 def objects(self, **kwargs): 49 return self.objects_from_queryset(self.model._default_manager.filter(**kwargs)) 50 36 51 def object_by_pk(self, pk): 37 52 return EasyInstance(self, self.model._default_manager.get(pk=pk)) 38 53 -
django/contrib/databrowse/templatetags/databrowse.py
1 from django import template 2 from django.template import resolve_variable 3 4 register = template.Library() 5 6 def letterlimit(value, arg): 7 try: 8 cutoff = int(arg) 9 return "%s%s" % (str(value)[:cutoff], '...') 10 except Exception, e: 11 return value 12 13 def do_pagination(parser, token): 14 try: 15 tag_name, pagination_dict_instance, width = token.split_contents() 16 except ValueError: 17 raise template.TemplateSyntaxError, "%r tag requires a double argument" % token.contents.split()[0] 18 try: 19 width_int = int(width) 20 except: 21 raise template.TemplateSyntaxError, "%r tag's second argument must be an integer" % token.contents.split()[0] 22 return PaginationNode(pagination_dict_instance, width_int) 23 24 class PaginationNode(template.Node): 25 def __init__(self, context_key, width): 26 self.context_key = context_key 27 self.width = width 28 def render(self, context): 29 to_return = "<div id=\"pagination\">" 30 link_str = "<a href=\"./?page=%d\">[%d]</a>" 31 try: 32 pagination_dict = resolve_variable(self.context_key, context) 33 if pagination_dict['pages'] < 2: 34 to_return = '' 35 else: 36 for page in xrange(pagination_dict['pages']): 37 if page == pagination_dict['current_page']: 38 to_return = to_return + ("<a href=\"./?page=%d\" class=\"bold\">[%d]</a>" % (page, page)) 39 elif page < (self.width + 1) or page > (pagination_dict['pages'] - self.width - 2): 40 to_return = to_return + (link_str % (page, page)) 41 elif page == pagination_dict['current_page'] - self.width - 1: 42 to_return = to_return + "..." 43 elif page == pagination_dict['current_page'] + self.width + 1: 44 to_return = to_return + "..." 45 elif (page >= pagination_dict['current_page'] - self.width) and (page <= pagination_dict['current_page'] + self.width): 46 to_return = to_return + (link_str % (page, page)) 47 to_return = to_return + "</div>" 48 except template.VariableDoesNotExist: 49 to_return = '' 50 return to_return 51 52 register.tag('paginate', do_pagination) 53 register.filter('letterlimit', letterlimit) 54 No newline at end of file -
django/contrib/databrowse/templates/databrowse/calendar_fordate.html
Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: django/contrib/databrowse/templatetags/databrowse.pyc ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: django/contrib/databrowse/templatetags/__init__.pyc ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
1 {% extends "databrowse/base.html" %} 2 {% load databrowse %} 3 4 {% block title %}{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} in {% if year %}{{ year }}{% else %}{% if month %}{{ month }}{% else %}{% if day %}{{ day }}{% endif %}{% endif %}{% endif %}{% endblock %} 5 6 {% block content %} 7 8 <div id="breadcrumbs"> 9 {% if day %} 10 <a href="../../../../../../../../">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../../../">Calendars</a> / <a href="../../../">By {{ field.verbose_name }}</a> / <a href="../../"> {{ year }}</a> / <a href="../">{{ month|capfirst }}</a> / {{ day }} 11 {% else %} 12 {% if month %} 13 <a href="../../../../../../../">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../../../">Calendars</a> / <a href="../../../">By {{ field.verbose_name }}</a> / <a href="../../"> {{ year }}</a> / <a href="../">{{ month|capfirst }}</a> / objects 14 {% else %} 15 {% if year %} 16 <a href="../../../../../../">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../../">Calendars</a> / <a href="../../">By {{ field.verbose_name }}</a> / <a href="../">{{ year }}</a> / objects 17 {% else %} 18 <a href="../../../../../">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../">Calendars</a> / <a href="../">By {{ field.verbose_name }}</a> / objects 19 {% endif %} 20 {% endif %} 21 {% endif %} 22 </div> 23 24 <h1> 25 {{ model.verbose_name_plural|capfirst }} 26 {% if day %} 27 with {{ field.verbose_name }} on {{ month|capfirst }} {{ day }}, {{ year }} 28 {% else %} 29 {% if month %} 30 with {{ field.verbose_name }} in {{ month|capfirst }} of {{ year }} 31 {% else %} 32 {% if year %} 33 with {{ field.verbose_name }} in {{ year }} 34 {% else %} 35 by {{ field.verbose_name }} 36 {% endif %} 37 {% endif %} 38 {% endif %} 39 </h1> 40 41 <ul class="objectlist"> 42 {% for object in object_list %} 43 <li class="{% cycle odd,even %}"><a href="{{ object.url }}">{{ object }}</a></li> 44 {% endfor %} 45 </ul> 46 47 {% if model.pagination %} 48 {% paginate model.pagination 2 %} 49 {% endif %} 50 51 {% endblock %} -
django/contrib/databrowse/templates/databrowse/calendar_month.html
1 {% extends "databrowse/base.html" %}2 3 {% block title %}{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} in {{ month|date:"F Y" }}{% endblock %}4 5 {% block content %}6 7 <div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../../">Calendars</a> / <a href="../../">By {{ field.verbose_name }}</a> / <a href="../">{{ month.year }}</a> / {{ month|date:"F" }}</div>8 9 <h1>{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} in {{ month|date:"F Y" }}</h1>10 11 <ul class="objectlist">12 {% for object in object_list %}13 <li class="{% cycle odd,even %}"><a href="{{ object.url }}">{{ object }}</a></li>14 {% endfor %}15 </ul>16 17 {% endblock %} -
django/contrib/databrowse/templates/databrowse/fieldchoice_detail.html
1 1 {% extends "databrowse/base.html" %} 2 {% load databrowse %} 2 3 3 4 {% block title %}{{ model.verbose_name_plural|capfirst|escape }} with {{ field.field.verbose_name|escape }} {{ value|escape }}{% endblock %} 4 5 … … 14 15 {% endfor %} 15 16 </ul> 16 17 18 {% paginate model.pagination 2 %} 19 17 20 {% endblock %} -
django/contrib/databrowse/templates/databrowse/model_detail.html
1 1 {% extends "databrowse/base.html" %} 2 {% load databrowse %} 2 3 3 4 {% block title %}{{ model.verbose_name_plural|capfirst }}{% endblock %} 4 5 … … 16 17 {% endfor %} 17 18 </ul> 18 19 20 {% paginate model.pagination 2 %} 21 19 22 {% endblock %} -
django/contrib/databrowse/templates/databrowse/calendar_daterange.html
1 {% extends "databrowse/base.html" %} 2 {% load databrowse %} 3 4 {% block title %}{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} in {% if year %}{{ year }}{% else %}{% if month %}{{ month }}{% else %}{% if day %}{{ day }}{% endif %}{% endif %}{% endif %}{% endblock %} 5 6 {% block content %} 7 8 <div id="breadcrumbs"> 9 {% if month %} 10 <a href="../../../../../../">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../../">Calendars</a> / <a href="../../">By {{ field.verbose_name }}</a> / <a href="../"> {{ year }}</a> / {{ month|capfirst }} 11 {% else %} 12 {% if year %} 13 <a href="../../../../../">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../">Calendars</a> / <a href="../">By {{ field.verbose_name }}</a> / {{ year }} 14 {% else %} 15 <a href="../../../../">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../">Calendars</a> / By {{ field.verbose_name }} 16 {% endif %} 17 {% endif %} 18 </div> 19 20 <h1> 21 {{ model.verbose_name_plural|capfirst }} 22 {% if month %} 23 with {{ field.verbose_name }} in {{ month|capfirst }} of {{ year }} 24 {% else %} 25 {% if year %} 26 with {{ field.verbose_name }} in {{ year }} 27 {% else %} 28 by {{ field.verbose_name }} 29 {% endif %} 30 {% endif %} 31 </h1> 32 33 <ul class="objectlist"> 34 {% for date in date_list %} 35 {% if month %} 36 <li class="{% cycle odd,even %}"><a href="{{ date|date:"d"|lower }}">{{ date|date:"D d" }}</a></li> 37 {% else %} 38 {% if year %} 39 <li class="{% cycle odd,even %}"> 40 <a href="{{ date|date:"F"|lower }}">{{ date|date:"F" }}</a><a href="{{ date|date:"F"|lower }}/objects" class="more">See Objects →</a> 41 </li> 42 {% else %} 43 <li class="{% cycle odd,even %}"> 44 <a href="{{ date|date:"Y"|lower }}">{{ date|date:"Y" }}</a><a href="{{ date|date:"Y"|lower }}/objects" class="more">See Objects →</a> 45 </li> 46 {% endif %} 47 {% endif %} 48 {% endfor %} 49 </ul> 50 51 {% if model.pagination %} 52 {% paginate model.pagination 2 %} 53 {% endif %} 54 55 {% endblock %} -
django/contrib/databrowse/templates/databrowse/homepage.html
1 1 {% extends "databrowse/base.html" %} 2 {% load databrowse %} 2 3 3 4 {% block title %}Databrowse{% endblock %} 4 5 … … 11 12 <h2><a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a></h2> 12 13 <p> 13 14 {% for object in model.sample_objects %} 14 <a href="{{ object.url }}">{{ object }}</a>,15 <a href="{{ object.url }}">{{ object|letterlimit:"30" }}</a>, 15 16 {% endfor %} 16 17 <a class="more" href="{{ model.url }}">More →</a> 17 18 </p> -
django/contrib/databrowse/templates/databrowse/fieldchoice_list.html
1 1 {% extends "databrowse/base.html" %} 2 {% load databrowse %} 2 3 3 4 {% block title %}{{ model.verbose_name_plural|capfirst|escape }} by {{ field.field.verbose_name|escape }}{% endblock %} 4 5 … … 14 15 {% endfor %} 15 16 </ul> 16 17 18 {% paginate pagination 2 %} 19 17 20 {% endblock %} -
django/contrib/databrowse/templates/databrowse/calendar_year.html
1 {% extends "databrowse/base.html" %}2 3 {% block title %}{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} in {{ year }}{% endblock %}4 5 {% block content %}6 7 <div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../">Calendars</a> / <a href="../">By {{ field.verbose_name }}</a> / {{ year }}</div>8 9 <h1>{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} in {{ year }}</h1>10 11 <ul class="objectlist">12 {% for month in date_list %}13 <li class="{% cycle odd,even %}"><a href="{{ month|date:"M"|lower }}/">{{ month|date:"F" }}</a></li>14 {% endfor %}15 </ul>16 17 {% endblock %} -
django/contrib/databrowse/templates/databrowse/calendar_day.html
1 {% extends "databrowse/base.html" %}2 3 {% block title %}{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} {{ day|date:"F j, Y" }}{% endblock %}4 5 {% block content %}6 7 <div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../../../">Calendars</a> / <a href="../../../">By {{ field.verbose_name }}</a> / <a href="../../">{{ day.year }}</a> / <a href="../">{{ day|date:"F" }}</a> / {{ day.day }}</div>8 9 <h1>{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} on {{ day|date:"F j, Y" }}</h1>10 11 <ul class="objectlist">12 {% for object in object_list %}13 <li class="{% cycle odd,even %}"><a href="{{ object.url }}">{{ object }}</a></li>14 {% endfor %}15 </ul>16 17 {% endblock %} -
django/contrib/databrowse/templates/databrowse/base.html
18 18 .filter strong { color:#666; } 19 19 /* OBJECT LISTS */ 20 20 .objectlist { clear:both; margin:0 -20px; color:#666; } 21 .objectlist li a { display:block; padding:1em 20px; } 22 .objectlist li a:hover { background:#5b80b2; color:#3B5572; color:#fff; text-decoration:none; } 21 .objectlist li { display:block; padding:1em 20px; color: #5b80b2; } 22 .objectlist li:hover { background:#5b80b2; color:#fff; } 23 .objectlist li a { color: inherit; } 24 .objectlist li a:hover { text-decoration: none; } 25 .objectlist li a.more { margin-left: 1.2em; color:#999 } 23 26 .related h2 { font-size: 1em; margin-bottom: 0.6em; } 24 27 .related .objectlist li a { padding: 0.6em 20px; } 25 28 .related .objectlist li.odd { background:#eee; } … … 47 50 #header a:hover { text-decoration:underline; } 48 51 /* CONTENT */ 49 52 #content { background:#fff; border-bottom:1px solid #ddd; padding:0 20px; } 53 /* PAGINATION */ 54 #pagination { margin: auto auto auto auto; text-align: center; font-size: 1.2em; } 55 #pagination .bold { font-weight: bold; } 50 56 </style> 51 57 </head> 52 58 <body id="{% block bodyid %}page{% endblock %}"> -
django/contrib/databrowse/sites.py
59 59 return plugin.model_view(request, self, rest_of_url) 60 60 61 61 def main_view(self, request): 62 easy_model = EasyModel(self.site, self.model) 62 page = 0 63 if request.has_key('page'): 64 page = int(request.GET['page']) 65 easy_model = EasyModel(self.site, self.model, paginate_by = 100, page = page) 63 66 html_snippets = u'\n'.join([p.model_index_html(request, self.model, self.site) for p in self.plugins.values()]) 64 67 return render_to_response('databrowse/model_detail.html', { 65 68 'model': easy_model,