first commit

This commit is contained in:
Benjamin Dauvergne 2012-12-11 17:31:08 +01:00
parent 0094a6be1d
commit 4907d911e1
2 changed files with 114 additions and 0 deletions

View File

@ -0,0 +1,18 @@
<table class="journal-table">
<thead class="journal-table-header">
<tr>
<td class="time">{% trans "Time" %}</td>
<td class="tag">{% trans "Tag" %}</td>
<td class="message">{% trans "Message" %}</tr>
</tr>
</thead>
<tbody class="journal-table-body">
{% for obj in object_list %}
<tr>
<td class="time">{{ obj.time|date:"SHORT_DATETIME_FORMAT" }}</td>
<td class="tag">{{ obj.tag }}</td>
<td class="message">{{ obj.message }}</td>
</tr>
{% endfor %}
</tbody>
</table>

96
django_journal/views.py Normal file
View File

@ -0,0 +1,96 @@
from django.views.generic import list
from django.db.models import Q
from django.utils.translation import ugettext_lazy as _
import models
__all__ = ('JournalFilterMixin', 'JournalPrefetchMixin',
'JournalContextDataMixin', 'JournalView', 'FilteredJournalView')
def common_prefix(str1, str2):
min_len = min(len(str1), len(str2))
for i in range(min_len):
if str1[i] != str2[i]:
return str1[:i]
return str1[:min_len]
class JournalFilterMixin(object):
filter_param = 'object_filter'
def get_queryset(self):
queryset = super(JournalFilterMixin, self).get_queryset()
filters = []
for object_filter in self.request.GET.get(self.filter_param, ()):
object_filter = object_filter.split(',')
if len(object_filter) != 2:
continue
content_type_id, object_id = object_filter
filters.append(Q(objectdata_set__content_type__id=content_type_id,
objectdata_set__object_id=object_id))
if filters:
queryset = queryset.filter(reduce(Q.__or__, filters))
return queryset
def get_message(self, obj):
ctx = obj.message_context()
for obj_data in obj.objectdata_set.select_related():
content_type_id = obj_data.content_type.id;
object_id = obj_data.object_id;
key = obj_data.tag.name;
qd = self.request.GET.copy()
qd.appendlist(self.filter_param,
'{0},{1}'.format(content_type_id, object_id))
url = '?{0}'.format(qd)
ctx[key] = u'<a href="{url}">{label}</a>'.format(url, ctx[key])
template = _(obj.template_content) # localize the template
return '<span>{}</span>'.format(template.format(**ctx))
def get_context_data(self, **kwargs):
context = super(JournalFilterMixin, self).get_context_data(**kwargs)
object_list = context['object_list']
for obj in object_list:
obj.message = self.get_message(obj)
return context
class JournalPrefetchMixin(object):
def get_queryset(self):
queryset = super(JournalPrefetchMixin, self).get_queryset()
queryset = queryset.select_related('tag', 'template') \
.prefetch_related('objectdata_set__content_type', 'stringdata_set',
'objectdata_set__tag', 'objectdata_set__content_object')
return queryset
def JournalSimplifyTimeDataMixin(object):
def get_context_data(self, **kwargs):
context = super(JournalSimplifyTimeDataMixin, self).get_context_data(**kwargs)
object_list = context['object_list']
previous_datetime = ''
for obj in object_list:
current_datetime = unicode(obj.time)
prefix = common_prefix(previous_datetime, current_datetime)
previous_datetime = current_datetime
current_datetime = current_datetime[len(prefix):]
i = current_datetime.find('-')
if i != -1:
current_datetime = current_datetime[i+1:]
else:
j = current_datetime.find(':')
if j != -1:
current_datetime = current_datetime[j+1:]
obj.time = current_datetime
return context
class JournalView(JournalPrefetchMixin, JournalSimplifyTimeDataMixin, list.ListView):
model = models.Journal
class FilteredJournalView(JournalPrefetchMixin, JournalFilterMixin,
JournalSimplifyTimeDataMixin, list.ListView):
model = models.Journal