first commit
This commit is contained in:
parent
0094a6be1d
commit
4907d911e1
|
@ -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>
|
|
@ -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
|
Loading…
Reference in New Issue