Statistics
| Branch: | Revision:

root / env / lib / python2.7 / site-packages / django / contrib / admin / templatetags / log.py @ 1a305335

History | View | Annotate | Download (2.07 KB)

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('content_type', 'user')[:self.limit]
16
        else:
17
            user_id = self.user
18
            if not user_id.isdigit():
19
                user_id = context[self.user].id
20
            context[self.varname] = LogEntry.objects.filter(user__id__exact=user_id).select_related('content_type', 'user')[:self.limit]
21
        return ''
22

    
23
@register.tag
24
def get_admin_log(parser, token):
25
    """
26
    Populates a template variable with the admin log for the given criteria.
27

28
    Usage::
29

30
        {% get_admin_log [limit] as [varname] for_user [context_var_containing_user_obj] %}
31

32
    Examples::
33

34
        {% get_admin_log 10 as admin_log for_user 23 %}
35
        {% get_admin_log 10 as admin_log for_user user %}
36
        {% get_admin_log 10 as admin_log %}
37

38
    Note that ``context_var_containing_user_obj`` can be a hard-coded integer
39
    (user ID) or the name of a template context variable containing the user
40
    object whose ID you want.
41
    """
42
    tokens = token.contents.split()
43
    if len(tokens) < 4:
44
        raise template.TemplateSyntaxError(
45
            "'get_admin_log' statements require two arguments")
46
    if not tokens[1].isdigit():
47
        raise template.TemplateSyntaxError(
48
            "First argument to 'get_admin_log' must be an integer")
49
    if tokens[2] != 'as':
50
        raise template.TemplateSyntaxError(
51
            "Second argument to 'get_admin_log' must be 'as'")
52
    if len(tokens) > 4:
53
        if tokens[4] != 'for_user':
54
            raise template.TemplateSyntaxError(
55
                "Fourth argument to 'get_admin_log' must be 'for_user'")
56
    return AdminLogNode(limit=tokens[1], varname=tokens[3], user=(len(tokens) > 5 and tokens[5] or None))