src/ldt/ldt/ldt_utils/views/group.py
author verrierj
Tue, 03 Jan 2012 16:26:26 +0100
changeset 327 e801e50edcce
parent 325 f4cb93c06b42
child 384 0e410517b311
permissions -rw-r--r--
A description can be added to a group
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
     1
from django.conf import settings
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
     2
from django.contrib.auth.decorators import login_required
319
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
     3
from django.contrib.auth.models import Group
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
     4
from django.http import HttpResponseServerError
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
     5
from django.shortcuts import render_to_response, get_object_or_404
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
     6
from django.template import RequestContext
319
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
     7
from ldt.ldt_utils.forms import GroupAddForm
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
     8
from guardian.shortcuts import remove_perm, get_objects_for_group, get_objects_for_user
319
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
     9
from ldt.security.utils import add_change_attr, get_userlist, get_userlist_group
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    10
from ldt.security.cache import get_cached_checker, cached_assign
325
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    11
from ldt.user.forms import PictureForm
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    12
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    13
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    14
@login_required
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    15
def get_group_projects(request):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    16
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    17
    # Get group, user and project_list
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    18
    grp_id = request.POST["id_group"]
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    19
    if grp_id == "-1":
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    20
        project_list = get_objects_for_user(request.user, 'ldt_utils.view_project', use_groups=False).exclude(owner=request.user)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    21
    else:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    22
        grp = Group.objects.get(id=grp_id)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    23
        everyone = Group.objects.get(name=settings.PUBLIC_GROUP_NAME)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    24
        project_list = get_objects_for_group(grp, 'ldt_utils.view_project') | get_objects_for_group(everyone, 'ldt_utils.view_project').filter(owner__in=[grp])
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    25
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    26
    project_list = add_change_attr(request.user, project_list)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    27
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    28
    is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    29
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    30
    return render_to_response("ldt/ldt_utils/partial/projectslist.html",
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    31
                              {'projects': project_list, 'show_username':True,
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    32
                               'is_gecko': is_gecko, 'group_id': grp_id},
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    33
                              context_instance=RequestContext(request))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    34
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    35
@login_required
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    36
def create_group(request):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    37
    if not request.user.user_permissions.filter(codename='add_group'):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    38
        return HttpResponseServerError('<h1>User %s can not create a group.</h1>' % request.user.username)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    39
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    40
    form_status = ''
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    41
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    42
    if request.method == 'POST':
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    43
        form = GroupAddForm(request.POST)
325
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    44
        picture_form = PictureForm(None, request.POST, request.FILES)
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    45
327
e801e50edcce A description can be added to a group
verrierj
parents: 325
diff changeset
    46
        if form.is_valid():        
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    47
            name = form.cleaned_data['name']
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    48
            members_list = form.cleaned_data['read_list']
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    49
            admin_list = form.cleaned_data['write_list']          
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    50
            
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    51
            group = Group.objects.create(name=name)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    52
            group.save()
327
e801e50edcce A description can be added to a group
verrierj
parents: 325
diff changeset
    53
            group.profile.description = form.cleaned_data['description']
e801e50edcce A description can be added to a group
verrierj
parents: 325
diff changeset
    54
            group.profile.save()
325
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    55
            
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    56
            picture_form.model = group
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    57
            if picture_form.is_valid():
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    58
                picture_form.save()
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    59
           
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    60
                cached_assign('is_owner_group', request.user, group)
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    61
                cached_assign('change_group', request.user, group)
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    62
                request.user.groups.add(group)             
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    63
    
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    64
                for elem in members_list:
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    65
                    if hasattr(elem, 'username'):
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    66
                        elem.groups.add(group)
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    67
                        if elem in admin_list:
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    68
                            cached_assign('change_group', elem, group)
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    69
                            
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    70
                form_status = 'saved'
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    71
            else:
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    72
                group.delete()
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    73
            
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    74
    else:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    75
        form = GroupAddForm()
325
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    76
        picture_form = PictureForm()
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    77
        
325
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    78
    return render_to_response("ldt/ldt_utils/create_group.html", {'group_edition': True, 'form' : form, 'form_status' : form_status, 
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    79
                                                                  'elem_list' : get_userlist(request.user), 'profile_picture_form': picture_form}, context_instance=RequestContext(request))
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    80
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    81
@login_required
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    82
def update_group(request, group_id):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    83
    group = get_object_or_404(Group, id=group_id)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    84
    checker = get_cached_checker(request.user)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    85
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    86
    if not checker.has_perm('change_group', group):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    87
        form_status = 'none'
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    88
        return render_to_response("ldt/ldt_utils/create_group.html", {'form_status' : form_status}, context_instance=RequestContext(request))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    89
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    90
    form_status = ''
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    91
    is_owner_group = checker.has_perm('is_owner_group', group)     
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    92
            
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    93
    if request.method == "POST":
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    94
        form = GroupAddForm(request.POST, instance=group)
325
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
    95
        picture_form = PictureForm(group, request.POST, request.FILES)
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    96
        submit_action = request.REQUEST.get("submit_button", False)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    97
        
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    98
        if submit_action == 'delete':
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    99
            if is_owner_group:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   100
                group.delete()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   101
                form_status = 'deleted'
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   102
        else:   
325
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
   103
            if form.is_valid() and picture_form.is_valid():
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   104
                name = form.cleaned_data['name']
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   105
                new_member_list = form.cleaned_data['read_list']
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   106
                old_member_list = group.user_set.exclude(id=request.user.id)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   107
                admin_list = form.cleaned_data['write_list']
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   108
                group.name = name
327
e801e50edcce A description can be added to a group
verrierj
parents: 325
diff changeset
   109
                group.profile.description = form.cleaned_data['description']
e801e50edcce A description can be added to a group
verrierj
parents: 325
diff changeset
   110
                group.profile.save()
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   111
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   112
                for user in new_member_list:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   113
                    if not hasattr(user, 'username'):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   114
                        raise AttributeError('new_member_list should only contain users')
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   115
                    if user != request.user:                      
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   116
                        group.user_set.add(user)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   117
                        if is_owner_group:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   118
                            if user in admin_list:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   119
                                cached_assign('change_group', user, group)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   120
                            else:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   121
                                remove_perm('change_group', user, group)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   122
                                
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   123
                for user in old_member_list:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   124
                    if user not in new_member_list:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   125
                        group.user_set.remove(user)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   126
                        remove_perm('change_group', user, group)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   127
                                        
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   128
                group.save()
325
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
   129
                picture_form.save()
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   130
                form_status = 'saved'                   
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   131
    else:
325
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
   132
        form = GroupAddForm(initial={'name':unicode(group.name)}) 
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
   133
        picture_form = PictureForm()   
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   134
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   135
    if form_status != 'deleted':
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   136
        member_list, admin_list = get_userlist_group(group, request.user)
327
e801e50edcce A description can be added to a group
verrierj
parents: 325
diff changeset
   137
        profile_image = group.profile
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   138
    else:    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   139
        member_list = admin_list = []
325
f4cb93c06b42 Images can be added to a group or a content.
verrierj
parents: 319
diff changeset
   140
        profile_image = ''
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   141
        
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   142
    return render_to_response("ldt/ldt_utils/create_group.html", {'group_id' : group_id, 'form' : form, 'form_status' : form_status, 'group_edition': True,
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   143
                                                                  'elem_list' : get_userlist(request.user), 'member_list': member_list, 'admin_list': admin_list,
327
e801e50edcce A description can be added to a group
verrierj
parents: 325
diff changeset
   144
                                                                  'is_owner_group': is_owner_group, 'profile_picture_form': picture_form, 'img_container': profile_image}, context_instance=RequestContext(request))
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   145
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   146
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   147
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   148
@login_required
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   149
def groups_filter(request, filter):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   150
    if filter and len(filter) > 0 and filter[0] == '_':
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   151
        filter = filter[1:]
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   152
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   153
    if filter:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   154
        group_list = request.user.groups.filter(name__icontains=filter)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   155
        search_active = True 
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   156
    else:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   157
        group_list = request.user.groups.all()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   158
        search_active = False
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   159
        
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   160
    group_list = group_list.exclude(name=settings.PUBLIC_GROUP_NAME)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   161
    group_list = sorted(group_list.all(), key=lambda group: group.name.lower())
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   162
    group_list = add_change_attr(request.user, group_list)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   163
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   164
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   165
    return render_to_response("ldt/ldt_utils/partial/groupslist.html",
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   166
                              {'groups': group_list, 'search_active': search_active},
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   167
                              context_instance=RequestContext(request))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   168