def directory_listing(self, request, folder_id=None, viewtype=None):
        clipboard = tools.get_user_clipboard(request.user)
        if viewtype == 'images_with_missing_data':
            folder = ImagesWithMissingData()
        elif viewtype == 'unfiled_images':
            folder = UnfiledImages()
        elif viewtype == 'last':
            last_folder_id = request.session.get('filer_last_folder_id')
            try:
                Folder.objects.get(id=last_folder_id)
            except Folder.DoesNotExist:
                url = reverse('admin:filer-directory_listing-root')
                url = "%s%s%s" % (url, popup_param(request),
                                  selectfolder_param(request, "&"))
            else:
                url = reverse('admin:filer-directory_listing',
                              kwargs={'folder_id': last_folder_id})
                url = "%s%s%s" % (url, popup_param(request),
                                  selectfolder_param(request, "&"))
            return HttpResponseRedirect(url)
        elif folder_id is None:
            folder = FolderRoot()
        else:
            folder = get_object_or_404(Folder, id=folder_id)
        request.session['filer_last_folder_id'] = folder_id

        # Check actions to see if any are available on this changelist
        actions = self.get_actions(request)

        # Remove action checkboxes if there aren't any actions available.
        list_display = list(self.list_display)
        if not actions:
            try:
                list_display.remove('action_checkbox')
            except __HOLE__:
                pass

        # search
        q = request.GET.get('q', None)
        if q:
            search_terms = unquote(q).split(" ")
        else:
            search_terms = []
            q = ''
        limit_search_to_folder = request.GET.get('limit_search_to_folder',
                                                 False) in (True, 'on')

        if len(search_terms) > 0:
            if folder and limit_search_to_folder and not folder.is_root:
                folder_qs = folder.get_descendants()
                file_qs = File.objects.filter(
                    folder__in=folder.get_descendants())
            else:
                folder_qs = Folder.objects.all()
                file_qs = File.objects.all()
            folder_qs = self.filter_folder(folder_qs, search_terms)
            file_qs = self.filter_file(file_qs, search_terms)

            show_result_count = True
        else:
            folder_qs = folder.media_folder_children.all()
            file_qs = folder.files.all()
            show_result_count = False

        folder_qs = folder_qs.order_by('name')
        order_by = request.GET.get('order_by', None)
        if order_by is not None:
            order_by = order_by.split(',')
            order_by = [field for field in order_by
                        if re.sub(r'^-', '', field) in self.order_by_file_fields]
            if len(order_by) > 0:
                file_qs = file_qs.order_by(*order_by)

        folder_children = []
        folder_files = []
        if folder.is_root:
            folder_children += folder.virtual_folders

        perms = FolderPermission.objects.get_read_id_list(request.user)
        root_exclude_kw = {'parent__isnull': False, 'parent__id__in': perms}
        if perms != 'All':
            file_qs = file_qs.filter(
                Q(folder__id__in=perms) | Q(owner=request.user))
            folder_qs = folder_qs.filter(
                Q(id__in=perms) | Q(owner=request.user))
        else:
            root_exclude_kw.pop('parent__id__in')
        if folder.is_root:
            folder_qs = folder_qs.exclude(**root_exclude_kw)

        folder_children += folder_qs
        folder_files += file_qs

        try:
            permissions = {
                'has_edit_permission': folder.has_edit_permission(request),
                'has_read_permission': folder.has_read_permission(request),
                'has_add_children_permission':
                folder.has_add_children_permission(request),
            }
        except:
            permissions = {}

        if order_by is None or len(order_by) == 0:
            folder_files.sort()

        items = folder_children + folder_files
        items_permissions = [
            (item, {'change': self.has_change_permission(request, item)}) for item in items]
        paginator = Paginator(items_permissions, settings.MEDIA_PAGINATE_BY)

        # Are we moving to clipboard?
        if request.method == 'POST' and '_save' not in request.POST:
            for f in folder_files:
                if "move-to-clipboard-%d" % (f.id,) in request.POST:
                    clipboard = tools.get_user_clipboard(request.user)
                    if f.has_edit_permission(request):
                        tools.move_file_to_clipboard([f], clipboard)
                        return HttpResponseRedirect(request.get_full_path())
                    else:
                        raise PermissionDenied

        selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME)
        # Actions with no confirmation
        if (actions and request.method == 'POST' and
                'index' in request.POST and '_save' not in request.POST):
            if selected:
                response = self.response_action(
                    request, files_queryset=file_qs, folders_queryset=folder_qs)
                if response:
                    return response
            else:
                msg = _("Items must be selected in order to perform "
                        "actions on them. No items have been changed.")
                self.message_user(request, msg)

        # Actions with confirmation
        if (actions and request.method == 'POST' and
                helpers.ACTION_CHECKBOX_NAME in request.POST and
                'index' not in request.POST and '_save' not in request.POST):
            if selected:
                response = self.response_action(
                    request, files_queryset=file_qs, folders_queryset=folder_qs)
                if response:
                    return response

        # Build the action form and populate it with available actions.
        if actions:
            action_form = self.action_form(auto_id=None)
            action_form.fields[
                'action'].choices = self.get_action_choices(request)
        else:
            action_form = None

        selection_note_all = ungettext('%(total_count)s selected',
                                       'All %(total_count)s selected', paginator.count)

        # If page request (9999) is out of range, deliver last page of results.
        try:
            paginated_items = paginator.page(request.GET.get('page', 1))
        except PageNotAnInteger:
            paginated_items = paginator.page(1)
        except EmptyPage:
            paginated_items = paginator.page(paginator.num_pages)
        return render_to_response(
            self.directory_listing_template,
            {
                'folder': folder,
                'clipboard_files': File.objects.filter(
                    in_clipboards__clipboarditem__clipboard__user=request.user
                ).distinct(),
                'paginator': paginator,
                'paginated_items': paginated_items,  # [(item, item_perms), ]
                'permissions': permissions,
                'permstest': userperms_for_request(folder, request),
                'current_url': request.path,
                'title': 'Directory listing for %s' % folder.name,
                'search_string': ' '.join(search_terms),
                'q': urlquote(q),
                'show_result_count': show_result_count,
                'limit_search_to_folder': limit_search_to_folder,
                'is_popup': popup_status(request),
                'select_folder': selectfolder_status(request),
                # needed in the admin/base.html template for logout links
                'root_path': reverse('admin:index'),
                'action_form': action_form,
                'actions_on_top': self.actions_on_top,
                'actions_on_bottom': self.actions_on_bottom,
                'actions_selection_counter': self.actions_selection_counter,
                'selection_note': _('0 of %(cnt)s selected') % {'cnt': len(paginated_items.object_list)},
                'selection_note_all': selection_note_all % {'total_count': paginator.count},
                'media': self.media,
                'enable_permissions': settings.FILER_ENABLE_PERMISSIONS,
                'can_make_folder': request.user.is_superuser or \
                (folder.is_root and settings.FILER_ALLOW_REGULAR_USERS_TO_ADD_ROOT_FOLDERS) or \
                permissions.get("has_add_children_permission"),
            }, context_instance=RequestContext(request))
dataset/ETHPy150Open django-leonardo/django-leonardo/leonardo/module/media/admin/folder/admin.py/FolderAdmin.directory_listing