Fixed #4125 -- Added some small fixes to contrib.databrowse: fixed calendar views, added a summary of the number of objects in each list, and added a template entry point for the customisation enthusiasts. Nice work, SmileyChris.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@5947 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
0a49719e7a
commit
8d97f15b96
|
@ -8,6 +8,7 @@ from django.utils import dateformat
|
||||||
from django.utils.text import capfirst
|
from django.utils.text import capfirst
|
||||||
from django.utils.translation import get_date_formats
|
from django.utils.translation import get_date_formats
|
||||||
from django.utils.encoding import smart_unicode, smart_str, iri_to_uri
|
from django.utils.encoding import smart_unicode, smart_str, iri_to_uri
|
||||||
|
from django.db.models.query import QuerySet
|
||||||
|
|
||||||
EMPTY_VALUE = '(None)'
|
EMPTY_VALUE = '(None)'
|
||||||
|
|
||||||
|
@ -30,8 +31,12 @@ class EasyModel(object):
|
||||||
return '%s%s/%s/' % (self.site.root_url, self.model._meta.app_label, self.model._meta.module_name)
|
return '%s%s/%s/' % (self.site.root_url, self.model._meta.app_label, self.model._meta.module_name)
|
||||||
|
|
||||||
def objects(self, **kwargs):
|
def objects(self, **kwargs):
|
||||||
for obj in self.model._default_manager.filter(**kwargs):
|
return self.get_query_set().filter(**kwargs)
|
||||||
yield EasyInstance(self, obj)
|
|
||||||
|
def get_query_set(self):
|
||||||
|
easy_qs = self.model._default_manager.get_query_set()._clone(klass=EasyQuerySet)
|
||||||
|
easy_qs._easymodel = self
|
||||||
|
return easy_qs
|
||||||
|
|
||||||
def object_by_pk(self, pk):
|
def object_by_pk(self, pk):
|
||||||
return EasyInstance(self, self.model._default_manager.get(pk=pk))
|
return EasyInstance(self, self.model._default_manager.get(pk=pk))
|
||||||
|
@ -194,3 +199,17 @@ class EasyInstanceField(object):
|
||||||
else:
|
else:
|
||||||
lst = [(self.values()[0], None)]
|
lst = [(self.values()[0], None)]
|
||||||
return lst
|
return lst
|
||||||
|
|
||||||
|
class EasyQuerySet(QuerySet):
|
||||||
|
"""
|
||||||
|
When creating (or cloning to) an `EasyQuerySet`, make sure to set the
|
||||||
|
`_easymodel` variable to the related `EasyModel`.
|
||||||
|
"""
|
||||||
|
def iterator(self, *args, **kwargs):
|
||||||
|
for obj in super(EasyQuerySet, self).iterator(*args, **kwargs):
|
||||||
|
yield EasyInstance(self._easymodel, obj)
|
||||||
|
|
||||||
|
def _clone(self, *args, **kwargs):
|
||||||
|
c = super(EasyQuerySet, self)._clone(*args, **kwargs)
|
||||||
|
c._easymodel = self._easymodel
|
||||||
|
return c
|
||||||
|
|
|
@ -64,22 +64,22 @@ class CalendarPlugin(DatabrowsePlugin):
|
||||||
|
|
||||||
def calendar_view(self, request, field, year=None, month=None, day=None):
|
def calendar_view(self, request, field, year=None, month=None, day=None):
|
||||||
easy_model = EasyModel(self.site, self.model)
|
easy_model = EasyModel(self.site, self.model)
|
||||||
|
queryset = easy_model.get_query_set()
|
||||||
extra_context = {'root_url': self.site.root_url, 'model': easy_model, 'field': field}
|
extra_context = {'root_url': self.site.root_url, 'model': easy_model, 'field': field}
|
||||||
if day is not None:
|
if day is not None:
|
||||||
# TODO: The objects in this template should be EasyInstances
|
return date_based.archive_day(request, year, month, day, queryset, field.name,
|
||||||
return date_based.archive_day(request, year, month, day, self.model.objects.all(), field.name,
|
|
||||||
template_name='databrowse/calendar_day.html', allow_empty=False, allow_future=True,
|
template_name='databrowse/calendar_day.html', allow_empty=False, allow_future=True,
|
||||||
extra_context=extra_context)
|
extra_context=extra_context)
|
||||||
elif month is not None:
|
elif month is not None:
|
||||||
return date_based.archive_month(request, year, month, self.model.objects.all(), field.name,
|
return date_based.archive_month(request, year, month, queryset, field.name,
|
||||||
template_name='databrowse/calendar_month.html', allow_empty=False, allow_future=True,
|
template_name='databrowse/calendar_month.html', allow_empty=False, allow_future=True,
|
||||||
extra_context=extra_context)
|
extra_context=extra_context)
|
||||||
elif year is not None:
|
elif year is not None:
|
||||||
return date_based.archive_year(request, year, self.model.objects.all(), field.name,
|
return date_based.archive_year(request, year, queryset, field.name,
|
||||||
template_name='databrowse/calendar_year.html', allow_empty=False, allow_future=True,
|
template_name='databrowse/calendar_year.html', allow_empty=False, allow_future=True,
|
||||||
extra_context=extra_context)
|
extra_context=extra_context)
|
||||||
else:
|
else:
|
||||||
return date_based.archive_index(request, self.model.objects.all(), field.name,
|
return date_based.archive_index(request, queryset, field.name,
|
||||||
template_name='databrowse/calendar_main.html', allow_empty=True, allow_future=True,
|
template_name='databrowse/calendar_main.html', allow_empty=True, allow_future=True,
|
||||||
extra_context=extra_context)
|
extra_context=extra_context)
|
||||||
assert False, ('%s, %s, %s, %s' % (field, year, month, day))
|
assert False, ('%s, %s, %s, %s' % (field, year, month, day))
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="{{ LANGUAGE_CODE }}" xml:lang="{{ LANGUAGE_CODE }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="{{ LANGUAGE_CODE }}" xml:lang="{{ LANGUAGE_CODE }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
|
||||||
<head>
|
<head>
|
||||||
<title>{% block title %}{% endblock %}</title>
|
<title>{% block title %}{% endblock %}</title>
|
||||||
|
{% block style %}
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
* { margin:0; padding:0; }
|
* { margin:0; padding:0; }
|
||||||
body { background:#eee; color:#333; font:76%/1.6 "Lucida Grande","Bitstream Vera Sans",Verdana,sans-serif; }
|
body { background:#eee; color:#333; font:76%/1.6 "Lucida Grande","Bitstream Vera Sans",Verdana,sans-serif; }
|
||||||
|
@ -48,9 +49,11 @@ p { margin:0.5em 0 1em 0; }
|
||||||
/* CONTENT */
|
/* CONTENT */
|
||||||
#content { background:#fff; border-bottom:1px solid #ddd; padding:0 20px; }
|
#content { background:#fff; border-bottom:1px solid #ddd; padding:0 20px; }
|
||||||
</style>
|
</style>
|
||||||
|
{% endblock %}
|
||||||
|
{% block extrahead %}{% endblock %}
|
||||||
</head>
|
</head>
|
||||||
<body id="{% block bodyid %}page{% endblock %}">
|
<body id="{% block bodyid %}page{% endblock %}">
|
||||||
<div id="header"><a href="{{ root_url }}">Databrowse</a></div>
|
<div id="header"><a href="{{ root_url }}">{% block databrowse_title %}Databrowse{% endblock %}</a></div>
|
||||||
<div id="content">
|
<div id="content">
|
||||||
{% block content %}{% endblock %}
|
{% block content %}{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
{% extends "databrowse/base.html" %}
|
|
@ -1,4 +1,4 @@
|
||||||
{% extends "databrowse/base.html" %}
|
{% extends "databrowse/base_site.html" %}
|
||||||
|
|
||||||
{% block title %}{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} {{ day|date:"F j, Y" }}{% endblock %}
|
{% block title %}{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} {{ day|date:"F j, Y" }}{% endblock %}
|
||||||
|
|
||||||
|
@ -6,7 +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>
|
<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>
|
||||||
|
|
||||||
<h1>{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} on {{ day|date:"F j, Y" }}</h1>
|
<h1>{{ object_list.count }} {% if object_list.count|pluralize %}{{ model.verbose_name_plural|escape }}{% else %}{{ model.verbose_name|escape }}{% endif %} with {{ field.verbose_name }} on {{ day|date:"F j, Y" }}</h1>
|
||||||
|
|
||||||
<ul class="objectlist">
|
<ul class="objectlist">
|
||||||
{% for object in object_list %}
|
{% for object in object_list %}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% extends "databrowse/base.html" %}
|
{% extends "databrowse/base_site.html" %}
|
||||||
|
|
||||||
{% block title %}Calendars{% endblock %}
|
{% block title %}Calendars{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% extends "databrowse/base.html" %}
|
{% extends "databrowse/base_site.html" %}
|
||||||
|
|
||||||
{% block title %}{{ field.verbose_name|capfirst }} calendar{% endblock %}
|
{% block title %}{{ field.verbose_name|capfirst }} calendar{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% extends "databrowse/base.html" %}
|
{% extends "databrowse/base_site.html" %}
|
||||||
|
|
||||||
{% block title %}{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} in {{ month|date:"F Y" }}{% endblock %}
|
{% block title %}{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} in {{ month|date:"F Y" }}{% endblock %}
|
||||||
|
|
||||||
|
@ -6,7 +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>
|
<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>
|
||||||
|
|
||||||
<h1>{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} in {{ month|date:"F Y" }}</h1>
|
<h1>{{ object_list.count }} {% if object_list.count|pluralize %}{{ model.verbose_name_plural|escape }}{% else %}{{ model.verbose_name|escape }}{% endif %} with {{ field.verbose_name }} on {{ day|date:"F Y" }}</h1>
|
||||||
|
|
||||||
<ul class="objectlist">
|
<ul class="objectlist">
|
||||||
{% for object in object_list %}
|
{% for object in object_list %}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% extends "databrowse/base.html" %}
|
{% extends "databrowse/base_site.html" %}
|
||||||
|
|
||||||
{% block title %}{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} in {{ year }}{% endblock %}
|
{% block title %}{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} in {{ year }}{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% extends "databrowse/base.html" %}
|
{% extends "databrowse/base_site.html" %}
|
||||||
|
|
||||||
{% block title %}{{ model.verbose_name_plural|capfirst }} by {{ field.field.verbose_name }}: {{ value|escape }}{% endblock %}
|
{% block title %}{{ model.verbose_name_plural|capfirst }} by {{ field.field.verbose_name }}: {{ value|escape }}{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% extends "databrowse/base.html" %}
|
{% extends "databrowse/base_site.html" %}
|
||||||
|
|
||||||
{% block title %}{{ model.verbose_name_plural|capfirst }} by {{ field.field.verbose_name }}{% endblock %}
|
{% block title %}{{ model.verbose_name_plural|capfirst }} by {{ field.field.verbose_name }}{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% extends "databrowse/base.html" %}
|
{% extends "databrowse/base_site.html" %}
|
||||||
|
|
||||||
{% block title %}{{ model.verbose_name_plural|capfirst|escape }} with {{ field.field.verbose_name|escape }} {{ value|escape }}{% endblock %}
|
{% block title %}{{ model.verbose_name_plural|capfirst|escape }} with {{ field.field.verbose_name|escape }} {{ value|escape }}{% endblock %}
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../">Fields</a> / <a href="../">By {{ field.field.verbose_name|escape }}</a> / {{ value|escape }}</div>
|
<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../">Fields</a> / <a href="../">By {{ field.field.verbose_name|escape }}</a> / {{ value|escape }}</div>
|
||||||
|
|
||||||
<h1>{{ model.verbose_name_plural|capfirst|escape }} with {{ field.field.verbose_name|escape }} {{ value|escape }}</h1>
|
<h1>{{ object_list.count }} {% if object_list.count|pluralize %}{{ model.verbose_name_plural|escape }}{% else %}{{ model.verbose_name|escape }}{% endif %} with {{ field.field.verbose_name|escape }} {{ value|escape }}</h1>
|
||||||
|
|
||||||
<ul class="objectlist">
|
<ul class="objectlist">
|
||||||
{% for object in object_list %}
|
{% for object in object_list %}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% extends "databrowse/base.html" %}
|
{% extends "databrowse/base_site.html" %}
|
||||||
|
|
||||||
{% block title %}Browsable fields in {{ model.verbose_name_plural|escape }}{% endblock %}
|
{% block title %}Browsable fields in {{ model.verbose_name_plural|escape }}{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% extends "databrowse/base.html" %}
|
{% extends "databrowse/base_site.html" %}
|
||||||
|
|
||||||
{% block title %}{{ model.verbose_name_plural|capfirst|escape }} by {{ field.field.verbose_name|escape }}{% endblock %}
|
{% block title %}{{ model.verbose_name_plural|capfirst|escape }} by {{ field.field.verbose_name|escape }}{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% extends "databrowse/base.html" %}
|
{% extends "databrowse/base_site.html" %}
|
||||||
|
|
||||||
{% block title %}Databrowse{% endblock %}
|
{% block title %}Databrowse{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% extends "databrowse/base.html" %}
|
{% extends "databrowse/base_site.html" %}
|
||||||
|
|
||||||
{% block title %}{{ model.verbose_name_plural|capfirst }}{% endblock %}
|
{% block title %}{{ model.verbose_name_plural|capfirst }}{% endblock %}
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / {{ model.verbose_name_plural|capfirst }}</div>
|
<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / {{ model.verbose_name_plural|capfirst }}</div>
|
||||||
|
|
||||||
<h1>{{ model.verbose_name_plural|capfirst }}</h1>
|
<h1>{{ model.objects.count }} {% if model.objects.count|pluralize %}{{ model.verbose_name_plural }}{% else %}{{ model.verbose_name }}{% endif %}</h1>
|
||||||
|
|
||||||
{{ plugin_html }}
|
{{ plugin_html }}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% extends "databrowse/base.html" %}
|
{% extends "databrowse/base_site.html" %}
|
||||||
|
|
||||||
{% block title %}{{ object.model.verbose_name|capfirst }}: {{ object }}{% endblock %}
|
{% block title %}{{ object.model.verbose_name|capfirst }}: {{ object }}{% endblock %}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue