app/django/contrib/admin/templatetags/log.py
changeset 54 03e267d67478
child 323 ff1a9aa48cfd
equal deleted inserted replaced
53:57b4279d8c4e 54:03e267d67478
       
     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'))