Django

Code

root/django/branches/newforms-admin/django/contrib/admin/templatetags/log.py

Revision 5195, 2.1 kB (checked in by adrian, 2 years ago)

newforms-admin: Merged to [5194]

  • Property svn:eol-style set to native
  • Property svn:keywords set to LastChangedRevision
Line 
1 from django import template
2 from django.contrib.admin.models import LogEntry
3
4 register = template.Library()
5
6 class AdminLogNode(template.Node):
7     def __init__(self, limit, varname, user):
8         self.limit, self.varname, self.user = limit, varname, user
9
10     def __repr__(self):
11         return "<GetAdminLog Node>"
12
13     def render(self, context):
14         if self.user is None:
15             context[self.varname] = LogEntry.objects.all().select_related()[:self.limit]
16         else:
17             if not self.user.isdigit():
18                 self.user = context[self.user].id
19             context[self.varname] = LogEntry.objects.filter(user__id__exact=self.user).select_related()[:self.limit]
20         return ''
21
22 class DoGetAdminLog:
23     """
24     Populates a template variable with the admin log for the given criteria.
25
26     Usage::
27
28         {% get_admin_log [limit] as [varname] for_user [context_var_containing_user_obj] %}
29
30     Examples::
31
32         {% get_admin_log 10 as admin_log for_user 23 %}
33         {% get_admin_log 10 as admin_log for_user user %}
34         {% get_admin_log 10 as admin_log %}
35
36     Note that ``context_var_containing_user_obj`` can be a hard-coded integer
37     (user ID) or the name of a template context variable containing the user
38     object whose ID you want.
39     """
40     def __init__(self, tag_name):
41         self.tag_name = tag_name
42
43     def __call__(self, parser, token):
44         tokens = token.contents.split()
45         if len(tokens) < 4:
46             raise template.TemplateSyntaxError, "'%s' statements require two arguments" % self.tag_name
47         if not tokens[1].isdigit():
48             raise template.TemplateSyntaxError, "First argument in '%s' must be an integer" % self.tag_name
49         if tokens[2] != 'as':
50             raise template.TemplateSyntaxError, "Second argument in '%s' must be 'as'" % self.tag_name
51         if len(tokens) > 4:
52             if tokens[4] != 'for_user':
53                 raise template.TemplateSyntaxError, "Fourth argument in '%s' must be 'for_user'" % self.tag_name
54         return AdminLogNode(limit=tokens[1], varname=tokens[3], user=(len(tokens) > 5 and tokens[5] or None))
55
56 register.tag('get_admin_log', DoGetAdminLog('get_admin_log'))
Note: See TracBrowser for help on using the browser.